如何实现jQuery直接上传到node.js上的Cloudinary

我试图通过他们的jQuery插件直接上传到Cloudinary到一个Node.js应用程序,我想知道是否有人能帮我弥补他们的例子中的一些空白。

这里的博客文章解释了如何做到这一点:

http://cloudinary.com/blog/direct_image_uploads_from_the_browser_to_the_cloud_with_jquery

在“其他开发框架和高级用法”部分,我坚持的部分是:

  • “设置数据表单数据为上传API参数的JSON表示,必填字段为api_key,时间戳,签名和callback。”,

更具体地说:

  • “签名需要在服务器端生成,以进行正确的身份validation。”

似乎没有任何的具体如何实现这个例子。

例子是:

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

而数据表单数据的非转义JSON内容是:

 { "timestamp": 1345719094, "callback": "https://www.example.com/cloudinary_cors.html", "signature": "7ac8c757e940d95f95495aa0f1cba89ef1a8aa7a", "api_key": "1234567890" } 

你如何去生成签名? 我知道我需要在node.js中做到这一点,似乎它需要发生在表单生成时,但我可以告诉签名需要包括时间戳 – 这肯定会过时的用户填写了表格?

请求authentication的文档在这里: http : //cloudinary.com/documentation/upload_images#request_authentication

在我正在使用的cloudinary_npm模块中, uploader.coffee有一个名为direct_upload的方法,它看起来像是一个帮助器来实现这一点,但我不清楚如何将它们全部绑定在一起。

这两个框架在博客文章Rails和Django中通过实例展示了这种复杂性,例如在Django中,您将{{ form.image }}添加到您的表单中,该表单将输出image = cloudinary.forms.CloudinaryJsFileField()的结果image = cloudinary.forms.CloudinaryJsFileField() – 不幸的是如何在任何其他服务器端环境中复制这个不包括image = cloudinary.forms.CloudinaryJsFileField()

如果有人能够阐明这一点,或者分享一个如何使其端到端工作的要点或例子,我将不胜感激。

请看https://github.com/cloudinary/cloudinary_npm/blob/67b7096c7fac2c2bed06603912966495d59dfa34/lib/uploader.coffee#L220上的uploader.image_upload_tag它返回一个input标签的html,可以和jquery.cloudinary一起使&#x7528;.js将图像直接上传到cloudinary。 这将是下一个npm版本的一部分(预计下周某个时候)。 至于时间戳 – 签名有效期为1小时,所以用户有充足的时间上传图片。

如果您正在使用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') }