改变顺序



我正在尝试使用dojo.io.send将文件上传到我的amazon帐户。然而,它没有做到这一点。

这是我运行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"字段在"文件"字段,因为它忽略了下面的,并抛出错误。

为了纠正这个问题,我需要使用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总是在post body中的第一个。

发送请求时,不使用content属性,使用rawBody属性。如果您使用的是旧版本的Dojo,也许您可以在请求中使用dojo.rawXhrPostpostData属性。

相关内容

  • 没有找到相关文章

最新更新