繁体   English   中英

从Google云端存储中流式下载图像时如何正确设置响应标头

[英]How to properly set response headers when streaming download of an image from Google Cloud Storage

到目前为止我有这个:

app.get('/:image/:size.:ext', (req, res) => {
  const remote = bucket.file(`${req.params.image}/${req.params.size}.${req.params.ext}`)
  if (req.query.download == 'true') {
    res.set('Content-Type', 'image/jpg')
    res.set('Content-Disposition', `attachment; filename="${req.params.image}.${req.params.size}.${req.params.ext}";` )
    res.set('Content-Transfer-Encoding', 'binary')
    // header("Content-Length: ".filesize($filename))
  }
  // if (isProd)
  //   res.set('Cache-Control', 'public, max-age=604800')
  remote.createReadStream({ validation: false })
    .on('error', error => {
      console.log(error)
      res.send(`data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7`)
    })
    .pipe(res)
})

在那个download=true块中,我不知道如何获取文件大小,如果它以某种方式通过remote流传入,或者我应该将其存储在某个数据库中,或以其他方式获取。

您可以从getMetadata(options,callback)获取metadata.size 它返回包含GetFileMetadataResponse的Promise

storage
  .bucket(bucketName)
  .file(filename)
  .getMetadata()
  .then(results => {
    const metadata = results[0];

    console.log(`File: ${metadata.name}`);
    console.log(`Size: ${metadata.size}`);
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM