Tôi đang cố gắng để có được một xây dựng cho phép người dùng tải lên một tập tin trực tiếp vào thùng Amazon S3 của tôi, từ một trang web hỗ trợ NodeJS. Dường như các hướng dẫn duy nhất ở ngoài kia, ngoài the actual amazon docs for this đều hết hạn.Amazon S3 POST api, và ký một chính sách với NodeJS
Tôi đã theo dõi this tutorial, để biết thông tin cơ bản, nhưng lại xuất hiện. Nó không có phương thức gọi tới crypto
chính xác, vì nó cố gắng truyền một đối tượng JavaScript thô đến phương thức update
, mà ném một lỗi vì nó không phải là một chuỗi hoặc bộ đệm.
Tôi cũng đã xem mã nguồn cho the knox npm package. Nó không có hỗ trợ POST được xây dựng - mà tôi hoàn toàn hiểu, bởi vì nó là trình duyệt đang thực hiện POST khi nó có đúng trường. Knox dường như có mã đúng để ký một chính sách, và tôi đã cố gắng làm cho mã của tôi hoạt động dựa trên điều này ... nhưng lại không có kết quả.
Đây là những gì tôi đã đưa ra, cho mã. Nó tạo ra một chính sách mã hóa base64, và nó tạo ra một chữ ký ... nhưng đó là chữ ký sai theo Amazon, khi tôi cố gắng thực hiện tải lên tệp.
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);
};
Tôi rõ ràng đang làm điều gì đó sai, ở đây. Nhưng tôi không có ý tưởng gì. Bất cứ ai có thể giúp xác định những gì tôi đang làm sai? Vấn đề của tôi ở đâu? Có ai có hướng dẫn làm việc về cách tạo một Chính sách Amazon S3 phù hợp không, với chữ ký, từ NodeJS v0.10.x, cho một POST tới s3 REST api?
Tải tệp trực tiếp lên S3 không thực sự là một nhiệm vụ tầm thường, đặc biệt nếu bạn muốn hỗ trợ chunking, tự động tiếp tục, siêu dữ liệu người dùng, v.v ... Xem xét sử dụng thư viện mà tôi duy trì: [Trình tải lên tốt] (http://fineuploader.com). Nó có hỗ trợ bản địa để tải lên trực tiếp lên S3 trong tất cả các trình duyệt, ngay cả IE7. Chunking và tự động tiếp tục, trong số các tính năng khác, cũng được hỗ trợ. Hơn nữa, tôi đã tự viết [ví dụ phía máy chủ node.js] (http://bit.ly/1do27a0) rằng, khi được ghép nối với Fine Uploader S3, sẽ xử lý tất cả chữ ký cho bạn. –
bạn có thể đăng nhận xét này làm câu trả lời không? tôi có thể sẽ sử dụng thư viện của bạn. vẫn đang đánh giá nó hoạt động như thế nào, v.v. –
Tôi không chắc chắn nó sẽ tiến triển tốt như thế nào. Nó có thể được coi là một câu trả lời nghèo hoặc liên kết, khá thẳng thắn. Sự hiểu biết của tôi là cộng đồng đang tìm kiếm các câu trả lời chi tiết bao gồm mã, và tôi không phù hợp với mô tả đó, đó là lý do tại sao tôi đăng nó như một bình luận. Nếu bạn có bất kỳ câu hỏi nào về Trình tải lên Tốt, hãy xem thẻ trình tải lên tốt trên SO, trong đó chúng tôi xử lý các câu hỏi hỗ trợ cho thư viện. –