如何从网址抓取文件然后上传到s3?有很多使用Multipart Upload的例子,但这应该更简单。这个代码执行服务器端。 S3上传失败,出现' NetworkingError:无法管道。不可读。'
import http from 'http';
import fs from 'fs';
import AWS from 'aws-sdk';
AWS.config.region = 'us-west-1';
const file = fs.createWriteStream('file.jpg');
var request = http.get('http://weknowmemes.com/wp-content/uploads/2012/04/dont-worry-cat-it.jpg', function(response) {
response.pipe(file);
file.on('finish', function() {
// Upload the File
var s3 = new AWS.S3({params: {Bucket: Config.s3Bucket}});
var params = {Key: 'mykey', ContentType: 'image/jpg', Body: file};
s3.putObject(params, function (err, data) {
console.log('err', err)
console.log('data', data)
});
});
});
答案 0 :(得分:0)
好吧我解决了这个问题。这是我的工作解决方案:
import request from 'request';
import bl from 'bl';
import AWS from 'aws-sdk';
const regexp = /filename=\"(.*)\"/gi;
let fileName;
let mimeType;
request
.get(imageUrl)
.on('response', function(response) {
fileName = regexp.exec(response.headers['content-disposition'] )[1];
mimeType = response.headers['content-type'];
})
.pipe(bl(function(error, data) {
const s3 = new AWS.S3({params: {Bucket: Config.s3Bucket}});
const params = {Key: fileName, ContentType: mimeType, Body: data};
s3.putObject(params, function(s3Error, data) {
if (s3Error) {
console.log('Error uploading data: ', s3Error);
} else {
console.log('Successfully uploaded data: ', data);
}
});
}))
我不需要使用WriteStream实例,但我确实需要为我的图像获取原始数据二进制文件,以便分配到s3' Body
的{{1}}参数} 方法。这需要使用BufferList即。 putObject
真的我的主要问题是没有理解如何从import bl from 'bl';
向外以S3的方式正确地格式化数据。当您使用Multipart Form时,它会为您处理该文件,因此我一直在为该用例找到所有简洁的示例。