我有一个使用URLRequest上传文件到服务器的Flex文件上传脚本。我想添加对HTTP身份验证(服务器上的密码保护目录)的支持,但我不知道如何实现这一点 - 我认为我需要以某种方式扩展该类,但是如何让我有点迷路。Flex 3 - 如何支持HTTP验证URLRequest?
我试着修改下面的代码(用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应该放在哪里 - 因为我目前没有,我不确定放置它的位置。
crossdomain.xml必须放置在你的web应用程序的根目录。因此,如果包含www.yoursite.com的文件位于D:\ websites \ yoursite.com,则文件路径应该是d:\ websites \ yoursite.com \ crossdomain.xml。 – 2009-05-22 13:23:55
除了放置您的corssdomain.xml文件(您应该这样做),您是否知道已安装了哪个Flash Player版本?你确定你在使用Flash Player 10吗? (看起来我的发现是,Flash Player 9与自定义授权标头不兼容。) – 2009-05-22 13:33:28
感谢您的帮助Christian - 不幸的是,我没有机会进一步测试(已经被另一个项目所淹没)但我会尝试一个我得到的机会。 – BrynJ 2009-05-27 13:18:16