ユーザーはNodeJSで動くウェブサイトからAmazon S3バケットに直接ファイルをアップロードできるようになりました。 the actual amazon docs for this以外の唯一のチュートリアルは、すべて非常に時代遅れです。Amazon S3 POST api、NodeJSでポリシーに署名する
私は基本情報のためにthis tutorialをフォローしていますが、もう日付が間違っています。 crypto
へのメソッド呼び出しは正しくありません。生のJavaScriptオブジェクトをupdate
メソッドに渡そうとするため、文字列やバッファではないためエラーが発生します。
私はまた、the 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ポリシーを生成するための作業チュートリアルがありますか?
チャンク、自動再開、ユーザーメタデータなどをサポートしたい場合は、特にファイルをS3に直接アップロードするのは簡単なことではありません。私が管理しているライブラリ、[Fine Uploader](http://fineuploader.com)の使用を検討してください。それはすべてのブラウザ(IE7でも)のS3へのダイレクトアップロードをネイティブサポートしています。 Chunkingと自動レジュームもサポートされています。さらに、[Uploader S3]と組み合わせると、あなたのためにすべての署名を処理する[node.jsサーバー側の例](http://bit.ly/1do27a0)を自分で作成しました。 –
このコメントを回答として投稿できますか?私はあなたのライブラリを使用して終了することがあります。それがどのように動作するかなどはまだ評価しています。 –
私はそれがうまくいくかどうかはわかりません。これは貧弱な、またはリンクのみの回答と考えられます。私の理解は、コミュニティがコードを含む詳細な回答を探していて、鉱山がその説明に合致しないということです。それが私がコメントとして投稿した理由です。ファインアップローダーについてご不明な点がございましたら、こちらのファインアップローダータグをご覧ください。ここでは、ライブラリーのサポートに関する質問を処理します。 –