我有一个使用 URLRequest 将文件上传到服务器的 Flex 文件上传脚本。我想添加对 http 身份验证(服务器上受密码保护的目录)的支持,但我不知道如何实现这一点 - 我假设我需要以某种方式扩展类,但我有点迷失了。
我尝试修改以下内容(用 URLRequest 替换 HTTPService),但这没有用。
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 应该放在哪里 - 因为我目前没有,并且不确定将它放在哪里。