0

私たちの AIR アプリケーションでは、ユーザーが選択した場所にファイルをダウンロードできるようにしたいと考えています。これは、次の方法で簡単に実行できます。

var fileReference:FileReference = new FileReference();
fileReference.download( request );

URLRequestサーブレットを指しますhttp://myserver/myapp/download。Web アプリケーションでを実行するnavigateToUrlと、ブラウザはサーバーによって HTTP ヘッダーに挿入されたファイル名を適切に使用します。ただし、AIR アプリケーションではdownload、ユーザーのファイル名として提案されます (これはおそらく URL の最後の部分であるため)。

AIR アプリケーションでのダウンロードでもその名前が使用されるようにするにはどうすればよいですか?

このメソッドには、デフォルトのファイル名を設定するためのオプションの 2 番目のパラメーターがあることは認識していdownloadますが、クライアントのコンパイル時にファイル名として HTTP ヘッダーに何が含まれているかわかりません。

4

1 に答える 1

0

私は次のコードでそれを行うことができました:

    var stream:URLStream = new URLStream();
    stream.addEventListener( HTTPStatusEvent.HTTP_RESPONSE_STATUS, function ( event:HTTPStatusEvent ):void
    {
        var fileName:String;
        for each(var requestHeader:URLRequestHeader in event.responseHeaders)
        {
            if (requestHeader.name == "Content-Disposition")
            {
                fileName = requestHeader.value.substring( requestHeader.value.indexOf( "=" ) + 2, requestHeader.value.length - 1 );
                logger.info( "Found filename in HTTP headers: {0}", [fileName] );
                break;
            }
        }

        stream.close();

        logger.info("Start file download...");
        var fileReference:FileReference = new FileReference();
        fileReference.addEventListener(Event.COMPLETE, download_completeHandler );
        fileReference.addEventListener(ProgressEvent.PROGRESS, download_progressHandler );
        fileReference.download( request, fileName );
    } );

    stream.load( request );

まず、このURLStreamクラスを使用して HTTP ヘッダーを取得します。ヘッダーを取得したらすぐに、ストリームを閉じます (これは大きなファイルなので、まだ実際のデータをダウンロードしたくありません)。ヘッダーから、Content-Dispositionパーツに含まれるファイル名を抽出し、その名前をデフォルト名として使用してFileReference.download()メソッドに渡します。

于 2012-06-22T13:16:36.793 に答える