URLRequest を使用してファイルをサーバーにアップロードする Flex ファイル アップロード スクリプトがあります。http 認証 (サーバー上のパスワードで保護されたディレクトリ) のサポートを追加したいのですが、これを実装する方法がわかりません。クラスを何らかの方法で拡張する必要があると思いますが、その方法について少し迷っています。
以下を変更しようとしました (HTTPService を URLRequest に置き換えます) が、うまくいきませんでした。
private function authAndSend(service:HTTPService):void{
var encoder:Base64Encoder = new Base64Encoder();
encoder.encode("someusername:somepassword");
service.headers = {Authorization:"Basic " + encoder.toString()};
service.send();
}
私は ActionScript / Flex に関しては知識がないことを指摘しておく必要がありますが、アップロード スクリプトをある程度修正することに成功しました。
[編集] - 以下の回答に基づいた進行状況の更新を次に示しますが、まだこれを機能させることはできません。
ご協力いただきありがとうございます。あなたのコードを実装しようとしましたが、うまくいきませんでした。
HTTP認証された場所を扱うときに私が経験している一般的な動作は、IE7ではすべて問題ありませんが、FirefoxではファイルをサーバーにアップロードしようとするとHTTP認証プロンプトが表示されます.正しい詳細が与えられたとしても、単に停止しますアップロードプロセス。
IE7 が問題ない理由は、ブラウザーと Flash コンポーネントによって共有されるセッション/認証情報にあると思いますが、Firefox ではそうではなく、上記の動作が発生します。
あなたの変更を組み込んだ私の更新されたアップロード機能は次のとおりです。
private function pergress():void
{
if (fileCollection.length == 0)
{
var urlString:String = "upload_process.php?folder="+folderId+"&type="+uploadType+"&feid="+formElementId+"&filetotal="+fileTotal;
if (ExternalInterface.available)
{
ExternalInterface.call("uploadComplete", urlString);
}
}
if (fileCollection.length > 0)
{
fileTotal++;
var urlRequest:URLRequest = new URLRequest("upload_file.php?folder="+folderId+"&type="+uploadType+"&feid="+formElementId+"&obfuscate="+obfuscateHash+"&sessidpass="+sessionPass);
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = new URLVariables("name=Bryn+Jones");
var encoder:Base64Encoder = new Base64Encoder();
encoder.encode("testuser:testpass");
var credsHeader:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + encoder.toString());
urlRequest.requestHeaders.push(credsHeader);
file = FileReference(fileCollection.getItemAt(0));
file.addEventListener(Event.COMPLETE, completeHandler);
file.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHTTPStatus);
file.addEventListener(ProgressEvent.PROGRESS, onUploadProgress);
file.upload(urlRequest);
}
}
上記のように、私は自分の機能の修正の有無にかかわらず、同じ結果を経験しているようです.
crossdomain.xml をどこに置くべきか尋ねてもよろしいですか。現在、crossdomain.xml を持っておらず、どこに置くべきかわからないためです。