Flash跨域多部分POST无法正常工作?

时间:2014-04-22 12:16:31

标签: flash xmlhttprequest crossdomain.xml

我使用moxie作为XHR2 polyfill来发布跨域POST文件上传,使用FormData构建包含来自File FileInput对象的多部分请求}。

使用HTML5运行时,请求成功并上传文件。但是,在使用Flash运行时,crossdomain.xml成功请求,但请求很快就会以readyState为0 status 4,表明请求已被取消,因为它是无效的交叉域名请求。

crossdomain.xml spec没有提及请求方法。对moxie Github的快速搜索显示this issue,虽然问题仍然存在,但似乎已经解决了。与问题不同,我在crossdomain.xml之后没有看到任何请求。

发送请求的代码:

var xhr = new moxie.XMLHttpRequest();
xhr.open('POST', url, true);
xhr.bind('load', function() {
  if(this.status === 200) {
    // yay!
  } else {
    // boo!
  }
});

var form = new moxie.FormData();
form.append('file', file); // file is a moxie.File from a FileInput

xhr.send(form);

我的crossdomain.xml如下:

<?xml version="1.0"?>
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
  <allow-access-from domain="*"/>
</cross-domain-policy>

1 个答案:

答案 0 :(得分:0)

根据the AS3 documentation

  

在Flash Player 10及更高版本中,如果您使用包含上传的多部分内容类型(例如“multipart / form-data”)(由“content-disposition”标题中的“filename”参数指示) POST主体),POST操作受上传应用的安全规则的约束:

     
      
  • 必须执行POST操作以响应用户启动的操作,例如鼠标单击或按键。
  •   
  • 如果POST操作是跨域的(POST目标与发送POST请求的SWF文件不在同一服务器上),则目标服务器必须提供允许跨域访问的URL策略文件。 / LI>   

我的请求失败的原因是第一个要点,因为我的POST没有完成“响应用户启动的操作,例如鼠标点击”。

moxie如何期望我这样做我不确定,因为所有(稀缺)文档都表明跨平台分段上传是可能的。