无法使用https将文件上传到S3(http工作正常)

时间:2014-03-13 16:10:00

标签: javascript nginx https amazon-s3

当我的网站使用https连接时,我无法将文件上传到S3。相同的代码在没有ssl的情况下完美运行。我真的很感激为什么会发生这种情况以及如何解决它的任何指导。 这是上传的功能:

uploadAvatar = function (aws, userId, successCallback) {
var imgType = document.getElementById('avatar').files[0].type;
var imgExt = document.getElementById('avatar').files[0].name.substr(document.getElementById('avatar').files[0].name.lastIndexOf('.'));
var dataURL = document.getElementById('avatar-canvas').toDataURL(imgType, 1.0);
var blob = dataURItoBlob(dataURL, imgType);
var fd = new FormData();

var key = 'avatar/' + aws.fileName + imgExt;

fd.append('key', key);
fd.append('acl', 'public-read');
fd.append('Content-Type', imgType);
fd.append('AWSAccessKeyId', aws.awsKey);
fd.append('policy', aws.policy)
fd.append('signature', aws.signature);

fd.append("file", blob);
var xhr = new XMLHttpRequest();

xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);

xhr.open('POST', '//' + aws.bucket + '.s3.amazonaws.com/', true); //MUST BE LAST LINE BEFORE YOU SEND 
xhr.send(fd);

function uploadComplete(evt) {
    successCallback.call(evt, key);
}

function uploadFailed(evt) {
    alert('upload error.');
    console.log(evt);
}

function uploadCanceled(evt) {
    alert("The upload has been canceled by the user or the browser dropped the connection.");
}

}

当我尝试上传时,这是我的firefox控制台的图像(请参阅请求如何获得响应): error image 1 这是上面代码在我的控制台中记录的错误对象:

error image 2

我在S3的CORS配置中确保http和https域都能够放置对象。 我使用Nginx和反向代理到端口3000,我在那里服务于Meteor项目。这可能不是问题,但是如果它有帮助我可以显示nginx配置。

1 个答案:

答案 0 :(得分:0)

如果您的存储桶名称,在您的情况下aws.bucket有点,那么您将使用https与DNS表单,https上传需要使用区域&路径形式。你可以阅读一篇文章here