resquest.js pipe 数据流下载文件时, 如何自动获取文件后缀名并保存? 在哪一步加入?
我想要在 fs.createWriteStream 之前获取到这个链接的后缀名
之后再 pipe 到这个数据流中保存文件.
Promise 的方式我试过, then 之后就是完整的 response, 不能写入数据流.
并且 fs.writeFile 方法我也试过了, 写入格式不正确.
注意哈: URL中没有文件后缀名
下面是代码
const fs = require('fs');
const Promise = require('bluebird');
const request = require('request');
let url = 'http://mmbiz.qpic.cn/mmbiz_jpg/D1Wza369eswnoapNaAdvtqygvMAnViaCLa8AMwwDZ4rebKrPvicxFf8zuibfialkPD3A7w8omWjicVm7GhFWcsibfGibw/0';
let file = fs.createWriteStream('file');
request
.get(url)
.on('response', function (response) {
let type = response.headers['content-type']
type = '.' + type.substring(type.lastIndexOf('/') + 1);
console.log(type);
// 在这里加是不可以的
})
.pipe(file)
.on('end', function () {
console.log('end')
})
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
楼上的回答亲测没有效果,写入的文件仍然没有后缀名。
原因:
.on("response", fun())
里的函数是以回调形式调用的,pipe()
的时候type
的值仍然是空字符串没改变,createWriteStream()
之后type
才有值,以下是正解:正解: