2011-08-04 44 views
1

我試圖使用dojo.io.send將文件上傳到我的amazon帳戶。但是,它沒有這樣做。更改序列

這是我看到當我跑過螢火蟲的錯誤。

<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> 

我想出的原因,顯然下面的「重點」領域是因爲它忽略了下面的人,丟了 錯誤 「文件」字段中。

爲了糾正這個問題,我需要有dojo.io.send()發送 PARAM的名單通過以下方式: - 通過與下面打

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); 

     }, 

理解的,

回答

2

的原因是剛道場遍歷所有屬性在JSON對象並從中生成POST請求體。由於迭代次序未確定,因此不能保證key屬性始終是第一個屬性。

解決方案是自己生成POST正文。您可以使用獲得POST體中的字符串:

"key=" + encodeURIComponent(key) + "&" + dojo.objectToQuery({AWSAccessKeyId : "", policy :""}) 

通過這樣做,key總是在帖子正文的第一個。

發送請求時,請勿使用content屬性,請改爲使用rawBody。如果您使用的是舊版本的Dojo,也許您可​​以在請求中使用dojo.rawXhrPost並使用postData屬性。