Я пытаюсь создать построенный, который позволяет пользователям загружать файл непосредственно в мой ковш Amazon S3 с веб-сайта NodeJS. Кажется, единственные учебные пособия, кроме фактических документов amazon для этого, очень устарели.
Я читал этот учебник, для получения базовой информации, но опять же это датировано. У него нет правильных вызовов метода crypto
, поскольку он пытается передать необработанный объект JavaScript методу update
, который выдает ошибку, потому что это не строка или буфер.
Я также смотрел источник пакета knox npm. У него нет встроенной поддержки POST, что я полностью понимаю, потому что браузер делает POST, когда у него есть правильные поля. Кажется, что у Knox есть правильный код для подписи политики, и я попытался заставить мой код работать на основе этого... но опять же безрезультатно.
Вот что я придумал для кода. Он создает политику с кодировкой base64 и создает подпись... но это неправильная подпись в соответствии с Amazon, когда я пытаюсь выполнить загрузку файла.
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);
};
Я, очевидно, что-то делаю неправильно. Но я понятия не имею, что. Может ли кто-нибудь помочь определить, что я делаю неправильно? Где моя проблема? Есть ли у кого-нибудь рабочий учебник для создания правильной политики Amazon S3 с сигнатурой от NodeJS v0.10.x для POST для s3 REST api?