我正在使用 NodeJs/express 创建一个 POST api 端点以将文件上传到谷歌云存储并返回一个公共(public) URL,如下所示:
https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]
上传完成后,我得到 URL,当我打开它时,文件被直接下载(图像、pdf 等......)
有没有办法在浏览器中查看和打开它?
这是我的上传功能:
const uploadImage = (file) => new Promise((resolve, reject) => {
const { originalname, buffer } = file
const blob = bucket.file(originalname.replace(/ /g, "_"))
const blobStream = blob.createWriteStream({
resumable: false
})
blobStream.on('finish', () => {
const publicUrl = format(
`https://storage.googleapis.com/${bucket.name}/${blob.name}`
)
resolve(publicUrl)
})
.on('error', () => {
reject(`Unable to upload image, something went wrong`)
})
.end(buffer)
})
谢谢
最佳答案
如果 URL 看起来像上面的代码,https://storage.googleapis.com/bucketName/objectName
,浏览器应该可以直接查看,只要满足以下几个条件:
application/octet-stream
,并且网络浏览器可能会决定只下载这样的对象而不是以某种形式显示它。 attachment; filename=foo.txt
来强制将对象作为附件下载。 . allUsers
读取权限。或者,您可以设置存储桶的默认对象 ACL 属性以包含该权限。 在您的情况下,对象已成功下载,因此不是 ACL 问题,如果您不知道 contentDisposition 设置,则可能是问题 #1。确保为对象指定合理的内容类型。
例子:
const blobStream = blob.createWriteStream({
resumable: false
contentType: "text/html"
})
关于node.js - 在浏览器中查看而非下载 Google Cloud Storage 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60602903/