Javascript 显示选项而不是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+

我正在做一个项目,我将上传一个文件到s3。我使用XMLHttpRequest向s3提交一个post请求,它给我一个403禁止状态。当我检查firebug中的请求时,它会显示一个“request Method:OPTIONS”,并假设它是一个POST请求

下面是我的代码:

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状态的解决方案吗?