我正在尝试使用请求从服务器下载图像。 我已经设法下载了一些东西,但是我得到的数据比图像还多。
function _download(uri, save_as, destination) {
let options = {
uri: uri,
timeout: 100000,
followAllRedirects: true
};
return new Promise(( _resolve,_reject) => {
let ext, filename, bar, total, downloaded, req;
req = request(options).on('response', (resp) => {
if (resp.statusCode === 200){
ext = _getFileType(resp.headers['content-type']);
filename = destination+'/'+save_as+ext;
var stream = fs.createWriteStream(filename)
resp.pipe(stream).on('error',function(err){
_reject(err);
}).on('finish',function(){
_resolve(filename);
});
} else {
_reject("unable to download image %s",uri);
}
}).on('error', function(err) {
console.log(err)
_reject(err);
})
});
}
我的原始网址采用https://www.test.com/image/original/12345的形式,然后服务器以301状态重定向到存储图像的s3存储桶。
不幸的是,由于图像的URL,我必须等待响应头内容类型确定它是哪种图像,然后使用它来传递图像。
一切都按预期工作...但是我得到的数据比s3中存储的更多。
有人有什么建议吗?
答案 0 :(得分:1)
请参考下面的链接
var fs = require('fs'),
request = require('request');
var download = function(uri, filename, callback){
request.head(uri, function(err, res, body){
console.log('content-type:', res.headers['content-type']);
console.log('content-length:', res.headers['content-length']);
request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
});
};
download('https://www.google.com/images/srpr/logo3w.png', 'google.png', function(){
console.log('done');
});