我正在使用请求模块下载文件,但是当文件名必须来自“Content-Disposition”头时,我不太确定如何将响应管道输出到流.所以基本上,我需要读取响应,直到找到头,然后将其余的管道到该文件名.
示例显示如下:
请求( ‘http://google.com/doodle.png’).pipe(fs.createWriteStream( ‘doodle.png’));
我想做什么(伪代码):
var req = request('http://example.com/download_latest_version?token=XXX'); var filename = req.response.headers['Content-Disposition']; req.pipe(fs.createWriteStream(filename));
我可以使用请求回调获取文件名:
request(url,function(err,res,body) { // get res headers here });
但是不会否定使用管道的好处,而不是将下载的文件加载到内存中?
解决方法
我正在从雅虎收集图片,并没有使用content-disposition标题,而是提取date和content-type标头来构建一个文件名.这似乎足够接近你想要做的事情
var request = require('request'),fs = require('fs'); var url2 = 'http://l4.yimg.com/nn/fp/rsz/112113/images/smush/aaroncarter_635x250_1385060042.jpg'; var r = request(url2); r.on('response',function (res) { res.pipe(fs.createWriteStream('./' + res.headers.date + '.' + res.headers['content-type'].split('/')[1])); });
忽略我的图片选择请:)