2015-08-08 80 views
0

我得到試圖上傳與下面的代碼cloudinary當一個400錯誤的請求錯誤:直接上傳到Cloudinary從瀏覽器錯誤的請求

$("input.cloudinary-fileupload[type=file]").cloudinary_fileupload(); 
$.cloudinary.config({"api_key":"6586856745648955","cloud_name":"some-cloud"}); 

    $http.get("http://localhost:3000/story/secret") 
    .then(function(res){ 
    var CLOUD_API_SECRET = res.data.CLOUD_API_SECRET; 
    var obj = 
    { 
     "timestamp": Date.now(), 
     "callback": "http://localhost:3000/cloudinary_cors", 
     "signature": CLOUD_API_SECRET, 
     "api_key": "6586856745648955" 
    }; 
    // var data = JSON.stringify(obj); 
    $("input[type='file']").attr('data-form-data', obj); 
    }) 
    .catch(function(err){ 
    console.log("error: ", err); 
    }); 

,用含有如下我的面前:

<input name="file" type="file" 
    class="cloudinary-fileupload" data-cloudinary-field="image_upload" 
    data-form-data=" ... html-escaped JSON data ... " > 
</input> 

我也試圖字符串化,則編碼「目標文件」變量和插件,在像這樣:

var data = JSON.stringify(obj); 
$("input[type='file']").attr('data-form-data', encodeURI(data)); 

我犯了同樣的錯誤。

我會很感激任何幫助或建議。謝謝一堆。

回答

1

這裏有幾個問題:

  1. 您的帳戶的api_secret不應該在你的客戶端代碼中顯露出來。
  2. 簽名不是api_secret,您應該生成一個基於您的api_secret和上傳選項的簽名。欲瞭解更多信息:http://cloudinary.com/documentation/upload_images#request_authentication。 簽名生成必須在服務器端完成。
  3. Cloudinary希望通過秒,而不是毫秒基於時間戳的簽名,所以最後3個位數是沒有必要的。因此,我建議您將時間戳除以1000以省略最後3位數字(例如,Date.now()/1000
+0

ohhhh。我懂了。哇。我那樣做都是錯誤的。謝謝澄清。畢竟,我只是結束了節點實施。我理解起來容易很多。我感謝你的回答! – spb

相關問題