我正在尝试使用从django api获取的签名URL将文件从Javascript上传到Amazon AWS,我在Boto的帮助下签名。这是我在python中的一行:
url = conn.generate_url(300, 'PUT', settings.AWS_VIDEO_BUCKET, key, headers={'Content-Length': '19448423'}, force_http = True )
使用从中生成的URL,我可以使用CURL发布到S3,如下所示:
curl -v --request PUT --upload-file video.mp4 "http://some_signed_url"
什么不起作用,是使用此URL通过Javascript将文件PUT到Amazon AWS。使用代理进行调试会显示管道错误,而如果出现问题,CURL会向我提供常规的Amazon Access Denied XML。这是我的javascript代码(文件是JS File对象):
var file = e.originalEvent.dataTransfer.files[0];
var fd = new FormData();
fd.append( 'file', file );
$.ajax({
url: 'signed_url',
data: fd,
processData: false,
contentType: false,
cache: false,
type: 'PUT',
success: function(data){
console.log("success");
},
error: function(data){
console.log(data.responseText);
}
});
任何想法从哪里开始?也许我没有在签名过程中包含所有必需的标题,或者FormData不是正确的方法。