[英]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.