我需要将文件上传到 Google Cloud Storage 并立即公开。
我使用createWriteStream。
如果我尝试写入一个文件,并在完成后立即调用 makePublic - 我收到一条关于没有此类对象的错误。
目前,我将 setTimeout 与 makePublic
回调结合使用,但这是一种很奇怪的方法。
代码如下所示:
const name = 'folder/file.jpg'
const fileRef = bucket.file(name)
const save = (stream, name, meta) =>
new Promise((resolve, reject) => {
stream
.on('error', (error) => reject(error)})
.on('end', () => resolve(name))
.pipe(fileRef.createWriteStream({
metadata: meta,
}))
})
save(yourReadStream(), name, yourMetaObj)
.then(() => {
setTimeout(() => {
fileRef.makePublic()
}, 1500)
})
如何避免 setTimeout 并以有保证的方式做到这一点?
最佳答案
最简单的解决方案是公开整个存储桶,然后您无需每次都尝试公开各个对象。
https://cloud.google.com/storage/docs/gsutil/commands/iam#ch
gsutil iam ch allUsers:objectViewer gs://ex-bucket
注意:这将使存储桶中的所有对象公开可读。如果该存储桶中有无法公开的对象,那么我建议创建一个单独的存储桶来保存公共(public)对象。
关于node.js - 如何创建可公开访问的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49328415/