使用AJAX直接上传到amazon S3

时间:2013-03-05 21:30:18

标签: javascript jquery amazon-s3

我正在尝试将文件从浏览器上传到s3亚马逊,我已经修改了CORS策略规则以允许存储桶的帖子,但我收到了错误

    <?xml version="1.0" encoding="UTF-8"?>
    <Error><Code>InvalidArgument</Code><Message>Bucket POST must contain a field named 'key'.  If it is specified, please check the order of the fields.</Message>
<ArgumentValue></ArgumentValue><ArgumentName>key</ArgumentName><RequestId>1E0A8DC78C0CEA9A</RequestId><HostId>XN38Qje9hUrGqHNIhtT8CtowX9tXlpyfEoaXb1UNxlsyLOWreh2mKqKVXg1zjLVl</HostId></Error>

这是我的请求和响应,我仍然通过仍然收到此错误

以正确的顺序传递关键参数

http://screencast.com/t/9ZUQO0s9d

http://screencast.com/t/CL8MKq6l6

任何人都可以告诉我它有什么问题,我正在使用FormData提交请求

任何帮助将不胜感激。

由于

编辑:这是代码请检查

var form_data = new FormData();         
                form_data.append('file',hdlr.file);
                //form_data.append('crop_type',settings.get_cropped_type());
                //form_data.append('attributes',JSON.stringify(file_attr));
                $('input:hidden',$form).each(function(){

                    form_data.append(this.name,this.value);

                });


                //finally post the file through AJAX  
                var xhr = new XMLHttpRequest();  
                xhr.open("POST", $form[0].action, true);  
                xhr.send(form_data);

enter image description here

1 个答案:

答案 0 :(得分:22)

看起来您的文件表单字段首先出现在请求中。我无法确定,因为您没有在答案中包含整个请求有效负载,但看起来它出现在“key”字段的正上方。 AWS会在文件字段后忽略请求中的所有字段,因此所有其他字段必须出现在文件之前。