我正在尝试使用 dojo.io.send 将文件上传到我的亚马逊帐户。但是,它没有成功。
这是我在运行 Firebug 时看到的错误。
<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>
我找到了原因,显然“Key”字段在 "file"字段,因为它忽略下面的字段并抛出 错误。
为了纠正这个问题,我需要有 dojo.io.send() 来发送 参数列表如下:-
key uploads/${filename}
AWSAccessKeyId
policy
signature
Content-Type plain/text
file
我通过玩下面的代码来试试运气,但它总是把文件 顶部的字段。
如果有人可以帮助我更改顺序,我将不胜感激。
代码片段:-
var jsonpArgs =
{
url: "https://s3.amazonaws.com/<Bucketname>",
form : dojo.byId("Myform"),
//MyForm has an attribute
//as file which takes the file name from the user to upload.
handleAs: "json",
content:
{
"key":"*******",
"AWSAccessKeyId":"****",
"policy" :"***********",
"signature":"*******",
"Content-Type":"plain/text"
},
error: function(error)
{
},
};
dojo.io.iframe.send(jsonpArgs);
},
感谢,
最佳答案
原因是 Dojo 只是迭代 JSON 对象中的所有属性并从中生成 POST 请求正文。由于迭代顺序未确定,您不能保证 key
属性始终是第一个。
解决方案是自己生成 POST 正文。您可以使用以下方式获取 POST 正文字符串:
"key=" + encodeURIComponent(key) + "&" + dojo.objectToQuery({AWSAccessKeyId : "", policy :""})
通过这样做,key
始终是帖子正文中的第一个。
发送请求时,不要使用content
属性,而是使用rawBody
。如果您使用的是旧版本的 Dojo,也许您可以使用 dojo.rawXhrPost
并在请求中使用 postData
属性。
关于javascript - 改变顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6943138/