2013-10-09 3 views
0

Я работаю над проектом, где я загружу файл на s3. Я использую XMLHttpRequest, чтобы отправить запрос на отправку s3 и предоставить мне статус Запрещенный 403. Когда я проверяю запрос, который я сделал в своем Firebug, он показывает «Request Method: OPTIONS» и его предполагается быть POST-запросом.Метод запроса, показывающий 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__T.

+1

И у вас есть код, который создает объекты XMLHttpRequest для старых IE, для которых этот код никогда не будет работать. – epascarello

+0

Вы также явно устанавливаете Content-Type запроса, который вы НЕ должны делать в этом случае. –

+0

@epascarello, вы хотите сказать, что верхний код на самом деле не работает? –

ответ

2

Вы вызываете preflighted request. Браузер делает запрос OPTIONS, чтобы удостовериться, что у него есть разрешение (через CORS) для доступа к серверу перед выполнением запроса POST.

Необходимо настроить ведро для поддержки CORS с запросами предварительной проверки as described in Amazon's own documentation.

+0

Хмм, у меня нет доступа к учетной записи s3, они только предоставили мне временные учетные данные. На самом деле у меня есть другой код, в котором я использовал загрузку на основе браузера s3, но он также продолжал давать мне запрет 403 или доступ запрещен. Как вы думаете, это решение для моего статуса 403? –

Смежные вопросы