从浏览器错误请求直接上传到 Cloudinary
Posted
技术标签:
【中文标题】从浏览器错误请求直接上传到 Cloudinary【英文标题】:Direct Upload to Cloudinary from Browser Bad Request 【发布时间】:2015-11-01 01:47:59 【问题描述】:我在尝试使用以下代码上传到 cloudinary 时收到 400 bad request 错误:
$("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>
我也尝试过字符串化,然后编码“obj”变量并像这样插入:
var data = JSON.stringify(obj);
$("input[type='file']").attr('data-form-data', encodeURI(data));
我得到同样的错误。
如果有任何帮助或建议,我将不胜感激。非常感谢。
【问题讨论】:
【参考方案1】:这里有几个问题:
-
您帐户的
api_secret
绝不应在您的客户端代码中显示。
签名不是api_secret
,您应该根据api_secret
和上传选项生成一个签名。欲了解更多信息:http://cloudinary.com/documentation/upload_images#request_authentication。
签名生成必须在服务器端完成。
Cloudinary 期望签名基于以秒为单位的时间戳,而不是以毫秒为单位,因此最后 3 位数字不是必需的。因此,我建议您将时间戳除以 1000 以省略最后 3 位数字(例如,Date.now()/1000
)
【讨论】:
哦。我知道了。哇。我做错了。感谢您的澄清。毕竟,我刚刚结束了节点实现。我更容易理解。感谢您的回答!以上是关于从浏览器错误请求直接上传到 Cloudinary的主要内容,如果未能解决你的问题,请参考以下文章
如何在node.js上实现jQuery直接上传到Cloudinary
使用 phonegap 将文件作为流上传到 cloudinary
使用签名的 url 将文件从 angularjs 直接上传到 amazon s3