GCloud功能和GStorage:发送下载的文件错误:“结束后写入”

时间:2019-04-10 10:42:31

标签: express google-cloud-storage google-cloud-functions

我的目标是从Google存储空间检索文件,然后通过响应将其发送回去。问题是,当我第一次启动此功能时,它会因Error [ERR_STREAM_WRITE_AFTER_END]: write after end而崩溃。下次处决可以正常工作。

exports = module.exports = region(defaultRegion).https.onRequest(async (req, res): Promise<void> => {
  const [authError] = await to(handleAuth(req, res));
  if (authError) {
    res.status(500).send(authError.message);
    return;
  }

  const { assetId, contentType, path } = req.query;

  const file = bloqifyStorage.bucket().file(`assets/${assetId}/${path}`);

  const fileExists = (await file.exists())[0];
  if (!fileExists) {
    res.status(404).send(`${path} was not found`);
    return;
  }

  const fileStream = file.createReadStream();

  fileStream.pipe(res).on('end', (): void => {
    res.setHeader('content-type', contentType);
  });
});

我在这里想念什么?

编辑:删除set标头无法解决。例如:

const fileStream = file.createReadStream();

// res.setHeader('content-type', contentType);
fileStream.pipe(res).on('error', (e): void => {
  console.log(e);
});

它将显示相同的错误。

1 个答案:

答案 0 :(得分:0)

您正在尝试在发送响应后设置标头。您不能这样做-标头必须位于主体之前。在res.setHeader()之前致电pipe()