Node.js下载图片

时间:2018-08-24 14:12:19

标签: node.js

我正在尝试使用请求从服务器下载图像。 我已经设法下载了一些东西,但是我得到的数据比图像还多。

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中存储的更多。
有人有什么建议吗?

1 个答案:

答案 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');
});

please visit this link

And this link also