Javascript 使用AJAX直接上传到AmazonS3返回错误:Bucket POST必须包含一个名为';键';

Javascript 使用AJAX直接上传到AmazonS3返回错误:Bucket POST必须包含一个名为';键';,javascript,jquery,amazon-s3,Javascript,Jquery,Amazon S3,我试图将文件从浏览器上传到s3 amazon,我修改了CORS策略规则以允许对bucket进行post,但我得到了错误 <?xml version="1.0" encoding="UTF-8"?> <Error><Code>InvalidArgument</Code><Message>Bucket POST must contain a field named 'key'. If it is specified, pl

我试图将文件从浏览器上传到s3 amazon,我修改了CORS策略规则以允许对bucket进行post,但我得到了错误

    <?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>
这是我的请求和响应,通过仍然得到这个错误,我正在以正确的顺序传递关键参数

有人能告诉我有什么问题吗?我正在使用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);

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

在此屏幕截图(screencast.com/t/9ZUQO0s9d)中,键的值为myfiles/${filename}。这是预期的吗?amazon s3 post允许myfiles/${filename}用于未知文件名请发布您的HTML和JS代码。@RyanWeir谢谢,我已经发布了代码,我正在使用php放置隐藏字段,因为参数是在服务器上准备的谢谢。这个错误并没有什么帮助,但在postman中将我的文件字段移到末尾后,事情开始起作用了。这个建议非常有效。“文件”输入必须是列表中的最后一个输入。