当我的网站使用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控制台的图像(请参阅请求如何获得响应): 这是上面代码在我的控制台中记录的错误对象:
我在S3的CORS配置中确保http和https域都能够放置对象。 我使用Nginx和反向代理到端口3000,我在那里服务于Meteor项目。这可能不是问题,但是如果它有帮助我可以显示nginx配置。
答案 0 :(得分:0)
如果您的存储桶名称,在您的情况下aws.bucket有点,那么您将使用https与DNS表单,https上传需要使用区域&路径形式。你可以阅读一篇文章here