首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >亚马逊S3 POST api,并与NodeJS签署策略

亚马逊S3 POST api,并与NodeJS签署策略
EN

Stack Overflow用户
提问于 2013-08-28 06:02:18
回答 4查看 8.3K关注 0票数 21

我正在尝试获得一个内置的,允许用户直接上传文件到我的亚马逊S3存储桶,从NodeJS供电的网站。除了之外,似乎唯一的教程都非常过时了。

我一直在关注,以获取基本信息,但它再次过时了。它没有正确调用crypto的方法,因为它试图将一个原始的JavaScript对象传递给update方法,该方法会抛出一个错误,因为它不是字符串或缓冲区。

我也一直在寻找的源代码。它没有内置的POST支持--这我完全理解,因为一旦它有了正确的字段,它就会由浏览器来做POST。Knox似乎确实有正确的代码来签署保单,我已经尝试在此基础上让我的代码正常工作……但同样无济于事。

这是我想出的代码。它生成一个base64编码的策略,并创建一个签名...但根据亚马逊的说法,当我尝试上传文件时,这是错误的签名。

代码语言:javascript
运行
复制
var crypto = require("crypto");
var config = require("../../amazonConfig.json");

exports.createS3Policy = function(callback) {
  var date = new Date();

  var s3Policy = {
    "expiration": "2014-12-01T12:00:00.000Z",
    "conditions": [
      {"acl": "public-read"}, 
      ["content-length-range", 0, 2147483648],
      {"bucket": "signalleaf"}, 
      ["starts-with", "$Cache-Control", ""],
      ["starts-with", "$Content-Type", ""],
      ["starts-with", "$Content-Disposition", ""],
      ["starts-with", "$Content-Encoding", ""],
      ["starts-with", "$Expires", ""],
      ["starts-with", "$key", "/myfolder/"], 
      {"success_action_redirect": "http://example.com/uploadsuccess"},
    ]
  };

  var stringPolicy = JSON.stringify(s3Policy).toString("utf-8");
  var buffer = Buffer(stringPolicy, "utf-8");

  var encoded = buffer.toString("base64");
  var signature = crypto.createHmac("sha1", config.secretKey)
    .update(new Buffer(stringPolicy, "utf-8")).digest("base64");


  var s3Credentials = {
    s3PolicyBase64: encoded,
    s3Signature: signature
  };

  GLOBAL.s3creds = s3Credentials;

  callback(s3Credentials);
};

在这里,我显然做错了什么。但我不知道是什么。有人能帮我找出我做错了什么吗?我的问题在哪里?有没有人有一个实用教程,教你如何从NodeJS v0.10.x生成适当的亚马逊S3策略和签名,以便将帖子发布到s3 REST api?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18476217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档