ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
フォーラム一覧   -   トピック一覧
   ActionScript 3.0
     FileReference の download について
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
5001758
投稿日時: 2010-9-6 18:05
お馴染みさん
登録日: 2010-9-3
居住地:
投稿: 11
Re: FileReference の download について
本件、未だ解決できない状況です。
もし、本件に関する解決策をご存知の方がいらっしゃいましたら
お手数ですが、情報提供頂けると幸いです。

以上、宜しくお願い致します。
5001758
投稿日時: 2010-9-3 13:09
お馴染みさん
登録日: 2010-9-3
居住地:
投稿: 11
Re: FileReference の download について
ご返答頂きまして、ありがとうございます。
失礼致しました。

>このtry/catchが不要ですね。
>FileReferenceのdownload()で発生した通信失敗のIOErroEventは
>FileReferenceに設定したイベントハンドラが処理するべきです。
ご指摘いただいた箇所を修正し確認致しましたが
前回の状況と同じ状況になります。

宜しくお願い致します。
fujita
投稿日時: 2010-9-3 12:16
ご主人様
登録日: 2006-7-11
居住地: 日本一暑いところの近く。
投稿: 128
Re: FileReference の download について
あ、そもそも、

public function dlFile(): void {
	try {
		configureListeners(file); 
		dlloadUrl.url = filename.text;
		file.download(dlloadUrl,dlfilename);
	} catch (e:IOErrorEvent){
		trace(e);
	} 
}

このtry/catchが不要ですね。
FileReferenceのdownload()で発生した通信失敗のIOErroEventは
FileReferenceに設定したイベントハンドラが処理するべきです。

------
Flexってtry/catchでIOErrorEventをキャッチできちゃうんですね…。
5001758
投稿日時: 2010-9-3 11:44
お馴染みさん
登録日: 2010-9-3
居住地:
投稿: 11
Re: FileReference の download について
ご返信いただきまして、ありがとうございます。
アドバイスをもとに試してみましたが、うまくいきませんでした。

>原因は解りませんが、catchのエラー引数の型、
>IOErrorEventじゃなくて、IOErrorじゃないですかね?
>(これで解決するかは解りませんが挙動は変わるかも…。)
以下のエラーに変わり、エラーがキャッチできなくなりました。
画面上にActionScriptエラーのプロンプトが表示され、内容は
下記の内容が出力されています。
挙動自体に変わりはなく、エラーが出続けました。

TypeError: Error #1034: 強制型変換に失敗しました。flash.events::IOErrorEvent@3aaf0b1 を flash.errors.IOError に変換できません。

>あとやり方があるとしたら、ioErrorHandler内で、removeEvents>()を呼んだあと、
>一度FileReferenceをnullにしてインスタンスを破棄してみては>いかがでしょう?
エラーがキャッチできなくなりました。
画面上にActionScriptエラーのプロンプトが表示され、内容は
下記の内容が出力されています。
挙動自体に変わりはなく、エラーが出続けました。

Error #2044: ハンドルされていない IOErrorEvent : text=Error #2038: ファイル I/O エラー。
at main()[D:\eclipse\workspace\test-filedownload\src\main.mxml:8]
at _main_mx_managers_SystemManager/create()
at mx.managers::SystemManager/initializeTopLevelWindow()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\managers\SystemManager.as:2438]
at mx.managers::SystemManager/http://www.adobe.com/2006/flex/mx/internal::docFrameHandler()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\managers\SystemManager.as:2330]

宜しくお願いいたします。

fujita
投稿日時: 2010-9-3 10:23
ご主人様
登録日: 2006-7-11
居住地: 日本一暑いところの近く。
投稿: 128
Re: FileReference の download について
こんにちは。

原因は解りませんが、catchのエラー引数の型、
IOErrorEventじゃなくて、IOErrorじゃないですかね?
(これで解決するかは解りませんが挙動は変わるかも…。)

あとやり方があるとしたら、ioErrorHandler内で、removeEvents()を呼んだあと、
一度FileReferenceをnullにしてインスタンスを破棄してみてはいかがでしょう?
5001758
投稿日時: 2010-9-3 10:06
お馴染みさん
登録日: 2010-9-3
居住地:
投稿: 11
FileReference の download について
はじめて投稿させて頂きます。

FLASHバージョン 10.1 より、以下の挙動が見られるようになりました。
詳細を以下に記述させて頂きますので、解決策がお分かりになる方がいらっしゃいましたら、ご返答頂けると幸いです。

なお、10.1より以下の対応がされた旨は把握しているのですが、IOErrorEventが何度も返ってくるのは想定外です。
FLASH側の問題であれば、仕方がないのですが…。

http://kb2.adobe.com/jp/cps/860/cpsid_86022.html

【事象】
ファイルのダウンロード時にダウンロード先のディスク要領に必要な空き容量が不足している場合、IOErrorEventが何度も返ってくる。

【解決したい内容】
IOErrorEventが何度も発生し無限ループに陥るため、それを回避したい。

【サンプルソース】
読みずらいソースで申し訳ございません。
ファイルのダウンロード時にダウンロード先のディスク要領に必要な空き容量が不足している場合、
一度はIOErrorEventを function ioErrorHandler でキャッチするのですが、その後何度もIOErrorEventが返されてしまいます。
以下の対策を試みましたが、問題解決には至っておりません。

 ・function ioErrorHandler に file.cancel(); 処理を追加 


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

<mx:Script>
	<![CDATA[
		public var dlloadUrl:URLRequest = new URLRequest();
		public var dlfilename:String = "test.ppt";
		public var file:FileReference = new FileReference();
		public function dlFile(): void {
			try {
				configureListeners(file);
				dlloadUrl.url = filename.text;
				file.download(dlloadUrl,dlfilename);			
			} catch (e:IOErrorEvent){
				trace(e);
			}
		}	

		/**
		 * イベントの登録処理。
		 * @param IEventDispatcher 
		 * @return なし
		 */
		private function configureListeners(dispatcher:IEventDispatcher):void {
	            dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
		}

		/**
		 * イベントの削除処理。
		 * @param IEventDispatcher 
		 * @return なし
		 */
		private function removeEvents(dispatcher:IEventDispatcher):void {
	            dispatcher.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
		}

		/**
		 * IOエラー発生イベント処理。
		 * IOエラーが発生した場合に呼び出される。
		 * @param event IOエラーイベント
		 * @return なし
		 */
		private function ioErrorHandler(event:IOErrorEvent):void{
			trace("onIOError start");
			removeEvents(file);
			trace("onIOError end");		
		}

	]]>
</mx:Script>	
 <mx:TextInput x="10" y="20" id = "filename" />
 <mx:Button x="178" y="20" label="FileDownLoad" click = "dlFile()" /> 	

</mx:Application>


宜しくお願い致します。
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を