NodeJS を利用したウェブサイトから、ユーザーがファイルを Amazon S3 バケットに直接アップロードできるようにするビルドを取得しようとしています。これに関する実際のAmazonドキュメントを除いて、そこにある唯一のチュートリアルはすべて非常に古くなっているようです.
基本的な情報については、このチュートリアルに従っていますが、これも古くなっています。crypto
生のJavaScriptオブジェクトをメソッドに渡そうとするため、修正するメソッド呼び出しがありませんupdate
。これは、文字列でもバッファでもないため、エラーをスローします。
knox npm packageのソースも調べました。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);
};
ここで私は明らかに何か間違ったことをしています。しかし、私には何がわかりません。誰かが私が間違っていることを特定するのを助けることができますか? 私の問題はどこですか?NodeJS v0.10.x から、s3 REST API への POST 用に、適切な Amazon S3 ポリシーを署名付きで生成する方法についての実用的なチュートリアルを持っている人はいますか?