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

8

我正在尝试通过他们的jQuery插件将文件直接上传到Cloudinary,并想知道是否有人可以帮助我填补他们的示例中存在的一些漏洞。

以下是解释如何实现它的博客文章:

http://cloudinary.com/blog/direct_image_uploads_from_the_browser_to_the_cloud_with_jquery

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

  • “将data-form-data设置为上传API参数的JSON表示形式。强制字段是api_key、timestamp、signature和callback。”

更具体地说:

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

似乎没有确切的示例来说明如何实现这一点。

示例代码如下:

<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()的结果-不幸的是,如何在任何其他服务器端环境中复制它并没有涉及。
如果有人能够解释一下这个问题,或者分享一个gist或示例,以便使其从头到尾正常工作,我将非常感激。
2个回答

2

1
image_upload_tag 已经包含在今天发布的 npm(0.2.6)中。 - Tal Lev-Ami
谢谢,这正是我想要的。另外,签名有效期1小时非常有用。我会尝试一下! - Jed Watson

0
如果你正在使用Node.js,这可能会有所帮助。
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')
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接