流-根据响应创建文件名

时间:2019-01-18 16:55:39

标签: node.js node-request node-streams

我刚开始使用流式传输...我正在用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')侦听器中设置。我该如何设置它以获取扩展名?

作为旁注-我无法在图片网址中使用扩展名,因为该扩展名并不总是存在。内容类型标头似乎是一种更可靠的方法。

0 个答案:

没有答案