Trong một dự án Node.js, tôi đang cố gắng lấy lại dữ liệu từ S3.
Khi tôi sử dụng getSignedURL
, mọi thứ hoạt động:
aws.getSignedUrl('getObject', params, function(err, url){
console.log(url);
});
Các thông số của tôi là:
var params = {
Bucket: "test-aws-imagery",
Key: "TILES/Level4/A3_B3_C2/A5_B67_C59_Tiles.par"
Nếu tôi lấy đầu ra URL đến bảng điều khiển và dán nó vào trình duyệt web, nó sẽ tải xuống tệp tôi cần.
Tuy nhiên, nếu tôi cố gắng sử dụng, getObject
tôi nhận được đủ loại hành vi kỳ quặc. Tôi tin rằng tôi chỉ đang sử dụng nó không đúng cách. Đây là những gì tôi đã thử:
aws.getObject(params, function(err, data){
console.log(data);
console.log(err);
});
Kết quả đầu ra:
{
AcceptRanges: 'bytes',
LastModified: 'Wed, 06 Apr 2016 20:04:02 GMT',
ContentLength: '1602862',
ETag: '9826l1e5725fbd52l88ge3f5v0c123a4"',
ContentType: 'application/octet-stream',
Metadata: {},
Body: <Buffer 01 00 00 00 ... > }
null
Vì vậy, có vẻ như điều này đang hoạt động bình thường. Tuy nhiên, khi tôi đặt một điểm ngắt vào một trong các console.log
s, IDE (NetBeans) của tôi gặp lỗi và từ chối hiển thị giá trị của dữ liệu. Trong khi đây chỉ có thể là IDE, tôi quyết định thử các cách khác để sử dụng getObject
.
aws.getObject(params).on('httpData', function(chunk){
console.log(chunk);
}).on('httpDone', function(data){
console.log(data);
});
Điều này không tạo ra bất cứ điều gì. Đưa một điểm ngắt vào cho thấy rằng mã không bao giờ đạt đến một trong hai điểm console.log
. Tôi cũng đã thử:
aws.getObject(params).on('success', function(data){
console.log(data);
});
Tuy nhiên, điều này cũng không xuất ra bất cứ thứ gì và việc đặt một điểm ngắt cho thấy rằng console.log
không bao giờ đạt được.
Tôi đang làm gì sai?
aws
Đối tượng của bạn có thực sự là một phiên bản mới củaaws.S3
đối tượng không? Ngoài ra, phản hồi từgetObject()
được chuyển trở lại phản hồi http hay nó đang được chuyển đến một tệp?