我使用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>
答案 0 :(得分:0)
在Flash Player 10及更高版本中,如果您使用包含上传的多部分内容类型(例如“multipart / form-data”)(由“content-disposition”标题中的“filename”参数指示) POST主体),POST操作受上传应用的安全规则的约束:
- 必须执行POST操作以响应用户启动的操作,例如鼠标单击或按键。
- 如果POST操作是跨域的(POST目标与发送POST请求的SWF文件不在同一服务器上),则目标服务器必须提供允许跨域访问的URL策略文件。 / LI>
我的请求失败的原因是第一个要点,因为我的POST没有完成“响应用户启动的操作,例如鼠标点击”。
moxie如何期望我这样做我不确定,因为所有(稀缺)文档都表明跨平台分段上传是可能的。