从浏览器错误请求直接上传到Cloudinary

时间:2015-08-08 19:21:33

标签: image browser upload cloudinary bad-request

我尝试使用以下代码上传到cloudinary时遇到400错误请求错误:

$("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>

我也尝试过字符串化,然后编码&#34; obj&#34;变量和插件就像这样:

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

我得到同样的错误。

我感谢任何帮助或建议。谢谢你们。

1 个答案:

答案 0 :(得分: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