1

默认情况下,Filepicker 允许几乎每个人都可以将文件添加到您的 S3 存储桶,他们足够聪明,可以将您的 API 密钥从客户端代码中复制出来,幸运的是还提供了一个带有过期策略的安全选项。

但我不知道如何在 Meteor.js 中实现这一点。来回尝试,安装meteor-crypto-base 包,尝试在服务器上生成哈希,在https://github.com/RGBboy/urlsafe-base64上尝试了RGBboy 的urlsafe-base64 算法。但我只是没有进一步。也许有人可以帮忙!先感谢您。

4

1 回答 1

2

这是一个如何在流星中执行文件选择器签名 URL 的示例,基于此处的文档:

var crypto = Npm.require('crypto');
var FILEPICKER_KEY = 'Z3IYZSH2UJA7VN3QYFVSVCF7PI';
var BASE_URL = 'https://www.filepicker.io/api/file';

Meteor.methods({
  signedUrl: function(handle) {
    var expiry = Math.floor(new Date().getTime() / 1000 + 60 * 60);

    var policy = new Buffer(JSON.stringify({
      handle: handle,
      expiry: expiry
    })).toString('base64');

    var signature = crypto
      .createHmac('sha256', FILEPICKER_KEY)
      .update(policy)
      .digest('hex');

    return BASE_URL + "/" + handle +
      "?signature=" + signature + "&policy=" + policy;
  }
});

请注意,这将需要存在于您的server目录中的某个位置,因此您不会将密钥发送给客户端。为了证明它有效,在客户端你可以这样调用它:

Meteor.call('signedUrl', 'KW9EJhYtS6y48Whm2S6D', function(err, url){console.log(url)});

如果一切正常,您应该在访问返回的 URL 时看到一张照片。

于 2013-08-31T15:17:19.583 回答