我正在尝试获得一个内置的,允许用户直接上传文件到我的亚马逊S3存储桶,从NodeJS供电的网站。除了之外,似乎唯一的教程都非常过时了。
我一直在关注,以获取基本信息,但它再次过时了。它没有正确调用crypto
的方法,因为它试图将一个原始的JavaScript对象传递给update
方法,该方法会抛出一个错误,因为它不是字符串或缓冲区。
我也一直在寻找的源代码。它没有内置的POST支持--这我完全理解,因为一旦它有了正确的字段,它就会由浏览器来做POST。Knox似乎确实有正确的代码来签署保单,我已经尝试在此基础上让我的代码正常工作……但同样无济于事。
这是我想出的代码。它生成一个base64编码的策略,并创建一个签名...但根据亚马逊的说法,当我尝试上传文件时,这是错误的签名。
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?
https://stackoverflow.com/questions/18476217
复制相似问题