我刚开始使用流式传输...我正在用request
流式传输文件,并将其以请求中提供的新名称保存在temp目录中。但是我想在响应中基于'Content-type'
标头添加文件扩展名。
const tempDir = path.join((global as any).appRoot, 'tempDir');
let filePath = path.join(tempDir, req.body.fileName);
// download file to temp dir
request({ url: req.body.imageUrl, encoding: null })
.on('response', response => {
let ext = '.jpg'; // default
const hdrs = response.headers;
if (hdrs && hdrs['content-type']) {
const contentType = hdrs['content-type'];
let parts = contentType.split('/');
let type = parts[1];
if (type) {
if (type === 'jpeg') {
type = 'jpg';
}
ext = `.${type}`;
}
}
filePath = filePath + ext
})
.on('error', err => res.send({ error: 'stream error: ' + err }))
.pipe(fs.createWriteStream(filePath, {
encoding: 'binary'
}));
问题在于,映像始终以请求中提供的任何FileName进行保存,但不带扩展名,因为链式pipe
方法是在扩展扩展名之前的某个时刻通过filePath
传递的,在.on('response')
侦听器中设置。我该如何设置它以获取扩展名?
作为旁注-我无法在图片网址中使用扩展名,因为该扩展名并不总是存在。内容类型标头似乎是一种更可靠的方法。