【发布时间】:2010-10-05 06:50:25
【问题描述】:
我有一个 Flex 文件上传脚本,它使用 URLRequest 将文件上传到服务器。我想添加对 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 应该放在您的 Web 应用程序的根目录中。因此,如果构成 www.yoursite.com 的文件位于 D:\websites\yoursite.com,则文件的路径应为 d:\websites\yoursite.com\crossdomain.xml。
-
除了放置您的 corssdomain.xml 文件(您应该这样做)之外,您是否知道您安装了哪个 Flash 播放器版本?您确定您使用的是 Flash Player 10 吗? (看起来我的发现是 Flash Player 9 不能很好地使用自定义授权标头。)
-
感谢您的帮助 Christian - 不幸的是,我没有机会进一步测试(已经被另一个项目淹没了)但我会尝试一个我有机会的。
-
随时!希望它对你有用。
标签: apache-flex actionscript base64 http-authentication urlrequest