如何在node.js上实现jQuery直接上传到Cloudinary
Posted
技术标签:
【中文标题】如何在node.js上实现jQuery直接上传到Cloudinary【英文标题】:How to implement jQuery direct upload to Cloudinary on node.js 【发布时间】:2012-10-16 08:26:28 【问题描述】:我正在尝试通过他们的 jQuery 插件将 Cloudinary 直接上传到 Node.js 应用程序,我想知道是否有人可以帮助我弥补他们示例中的一些空白。
这是解释如何做到这一点的博客文章:
http://cloudinary.com/blog/direct_image_uploads_from_the_browser_to_the_cloud_with_jquery
在“其他开发框架和高级用法”部分,我坚持的部分是:
"将data-form-data设置为上传API参数的JSON表示。必填字段为api_key、时间戳、签名和回调。",更具体地说:
“需要在服务器端生成签名才能进行正确的身份验证。”似乎没有任何具体如何实现这一目标的示例。
例子是:
<input name="file" type="file"
class="cloudinary-fileupload" data-cloudinary-field="image_upload"
data-form-data=" ... html-escaped JSON data ... " ></input>
data-form-data 的未转义 JSON 内容为:
"timestamp": 1345719094,
"callback": "https://www.example.com/cloudinary_cors.html",
"signature": "7ac8c757e940d95f95495aa0f1cba89ef1a8aa7a",
"api_key": "1234567890"
如何生成签名?我知道我需要在 node.js 中执行此操作,并且它似乎需要在生成表单时发生,尽管据我所知,签名需要包含时间戳 - 到用户时肯定会过时填好表格了吗?
请求认证的文档在这里:http://cloudinary.com/documentation/upload_images#request_authentication
在我正在使用的 cloudinary_npm 模块中,uploader.coffee
中有一个名为 direct_upload
的方法,这似乎是实现这一目标的帮手,但我不清楚如何实际绑定它在一起。
博文中带有真实示例的两个框架,Rails 和 Django,通过它们自己的帮助程序抽象了这种复杂性,例如在 Django 中,您将 form.image
添加到您的表单中,该表单从 image = cloudinary.forms.CloudinaryJsFileField()
输出结果 - 不幸的是,未涵盖如何在任何其他服务器端环境中复制它。
如果有人能对此有所了解,或分享如何使其端到端工作的要点或示例,我将不胜感激。
【问题讨论】:
【参考方案1】:请查看 https://github.com/cloudinary/cloudinary_npm/blob/67b7096c7fac2c2bed06603912966495d59dfa34/lib/uploader.coffee#L220 的 uploader.image_upload_tag 它返回输入标签的 html,可以与 jquery.cloudinary.js 一起使用,将图像直接上传到 cloudinary。 它将成为 npm 下一个版本的一部分(预计下周某个时间)。 至于时间戳——签名有效期为1小时,所以应该有足够的时间让用户上传图片。
【讨论】:
image_upload_tag 包含在今天(0.2.6)发布的 npm 中。 谢谢,这就是我要找的。此外,签名有效期为 1 小时非常有用。我试试看!【参考方案2】:如果您使用的是 nodejs,这可能会有所帮助
var querystring = require('querystring');
var toHash = querystring.stringify(req.query) + secret;
var signature = sha1(toHash);
function sha1(data)
var generator = crypto.createHash('sha1');
generator.update(data)
return generator.digest('hex')
【讨论】:
以上是关于如何在node.js上实现jQuery直接上传到Cloudinary的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Rails API 中的 Attachinary 将图像从 React Native App 直接上传到 Cloudinary