Javascript 显示选项而不是POST的请求方法
我正在做一个项目,我将上传一个文件到s3。我使用XMLHttpRequest向s3提交一个post请求,它给我一个403禁止状态。当我检查firebug中的请求时,它会显示一个“request Method:OPTIONS”,并假设它是一个POST请求 下面是我的代码:Javascript 显示选项而不是POST的请求方法,javascript,xmlhttprequest,Javascript,Xmlhttprequest,我正在做一个项目,我将上传一个文件到s3。我使用XMLHttpRequest向s3提交一个post请求,它给我一个403禁止状态。当我检查firebug中的请求时,它会显示一个“request Method:OPTIONS”,并假设它是一个POST请求 下面是我的代码: function GetXmlHttpObject () { var xmlHttp = null; try { // Firefox, Opera 8.0+, Safari, IE 7+
function GetXmlHttpObject () {
var xmlHttp = null;
try {
// Firefox, Opera 8.0+, Safari, IE 7+
xmlHttp = new XMLHttpRequest();
} catch (e) {
// Internet Explorer - old IE - prior to version 7
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
function uploadFile() {
console.log(AWSAccessKeyId);
var file = document.getElementById('file').files[0];
var fd = new FormData();
var key = "events/" + (new Date).getTime() + '-' + file.name;
fd.append('key', key);
fd.append('acl', 'public-read');
fd.append('Content-Type', file.type);
fd.append('AWSAccessKeyId', AWSAccessKeyId);
fd.append('policy', policyBase64)
fd.append('signature', signature);
fd.append("file",file);
var xhr = GetXmlHttpObject();
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
xhr.open('POST', 'https://'+bucket+'.s3.amazonaws.com/', true); //MUST BE LAST LINE BEFORE YOU SEND
xhr.setRequestHeader("Content-type","multipart/form-data");
xhr.send(fd);
}
我被困在这里了。T\u\T.您正在触发一个。浏览器正在发出选项请求,以确保在发出POST请求之前,它有权(通过CORS)访问服务器
您必须将bucket配置为支持带有预飞行请求的COR。并且您有代码为旧IEs设置XMLHttpRequest对象,而这些代码将永远无法使用。您还显式设置请求的内容类型,在这种情况下不应这样做。@epascarello,你的意思是说顶级代码不会真正起作用吗?在IE9和更早版本中,它肯定不会起作用,因为这些浏览器不支持文件API。嗯,我没有访问s3帐户的权限,他们只给了我一个临时凭据。实际上,我还有一个代码,我使用了基于s3浏览器的上传,但它也一直给我403禁止或拒绝访问。你认为这是我403状态的解决方案吗?