2015-10-30 52 views
7

Tôi muốn tải hình ảnh lên máy chủ web amazon và cho rằng tôi đang sử dụng aws-sdk với nútjs.sử dụng aws-sdk để tải hình ảnh lên s3 bằng cách sử dụng nodejs

Tôi có thể tải hình ảnh lên xô s3, nhưng khi tôi nhấp vào URL để truy cập chúng tôi sẽ nhận được lỗi từ chối truy cập.

Dưới đây là cấu hình của tôi

 var AWS = require('aws-sdk'); 

    //aws credentials 
    AWS.config = new AWS.Config(); 
    AWS.config.accessKeyId = "<access_key>"; 
    AWS.config.secretAccessKey = "<secret_key>"; 
    AWS.config.region = "ap-southeast-1"; 
    AWS.config.apiVersions = { 
     "s3": "2006-03-01" 
    } 

    var s3 = new AWS.S3(); 

    var bodystream = fs.createReadStream(req.files.pic.path); 

    var params = { 
     'Bucket': '<bucket_name>', 
     'Key': 'uploads/images/' + req.files.pic.name, 
     'Body': bodystream, 
     'ContentEncoding': 'base64', 
     'ContentType ': 'image/jpeg' 
    }; 

    //also tried with s3.putObject 
    s3.upload(params, function(err, data){ 
     console.log('after s3 upload====', err, data); 
    }) 

Hình ảnh được tải lên thành công nhưng content-type của họ là application/octet. Ngoài ra tôi nghĩ rằng có một số vấn đề cho phép, bởi vì khi tôi thêm một sự cho phép mới sau đó tôi có thể tải về hình ảnh nhưng không thể nhìn thấy nó.

Bạn có thể cho tôi biết điều gì sai với cấu hình này và tôi cũng muốn biết sự khác biệt giữa phương thức s3.upload và s3.putObject.

Trả lời

3

Để xác định Content-Type tiêu đề bạn cần phải xác định Metadata phần:

var params = { 
    'Bucket': '<bucket_name>', 
    'Key': 'uploads/images/' + req.files.pic.name, 
    'Body': bodystream, 
    'ContentEncoding': 'base64', 
    Metadata: { 
     'Content-Type': 'image/jpeg' 
    } 

}; 
+0

nhận được lỗi này nếu tôi cố gắng để xác định nội dung kiểu cách này { [SignatureDoesNotMatch: Chữ ký yêu cầu chúng tôi tính toán không khớp với chữ ký bạn đã cung cấp. Kiểm tra khóa và phương thức ký của bạn.] thông báo: 'Chữ ký yêu cầu mà chúng tôi đã tính không khớp với chữ ký bạn đã cung cấp. Kiểm tra chìa khóa của bạn và phương pháp ký ', mã: ' SignatureDoesNotMatch', thời gian: Fri 30 tháng 10 2015 12:55:30 GMT + 0530 (IST), statusCode: 403, retryable: false, retryDelay: 30 } –

+0

@BhushanGoel Tôi đã sửa mã, quên dấu gạch ngang trong 'content-type' –

+0

vâng nó đã hoạt động, bây giờ trong bảng điều khiển s3 tôi có thể thấy điều này trong siêu dữ liệu: x-amz-meta-content-type: Hình ảnh/png –

Các vấn đề liên quan