【发布时间】:2019-09-02 15:32:21
【问题描述】:
所以我从 Google Cloud Storage 获得了这个功能,我需要对其进行更改,以便它可以上传多个文件而不是一个文件。我正在尝试找到一个好的解决方案,让它始终等到所有文件都上传完毕。不知道如何使它异步 - 我应该在 stream.on('finish',(...)) 或 file.makePublic().then(...) 上等待,这绝对是我可以用 Promise.all() 收集然后解析 next() 的承诺。
或者如果 Google 没有在他们的文档中披露的解决方案已经存在,那就更好了。
功能:
function sendUploadsToGCS (req, res, next) {
if (!req.files) {
return next()
}
let vals = Object.values(req.files)
for(let f of vals){
const gcsname = Date.now() + f[0].originalname
const file = bucket.file(gcsname)
const stream = file.createWriteStream({
metadata: {
contentType: f[0].mimetype
},
resumable: false
})
stream.on('error', (err) => {
f[0].cloudStorageError = err
next(err)
})
stream.on('finish', () => {
f[0].cloudStorageObject = gcsname;
file.makePublic().then(() => {
f[0].cloudStoragePublicUrl = getPublicUrl(gcsname)
console.log('pub url: ', getPublicUrl(gcsname))
next()
})
})
stream.end(f[0].buffer)
}
}
原始函数(一个文件):https://cloud.google.com/nodejs/getting-started/using-cloud-storage#upload_to_cloud_storage
【问题讨论】:
-
这是一个类似问题的 [链接][1],其中包含并行上传文件的有效答案 [1]:stackoverflow.com/questions/54095155/…
-
谢谢@AndieVega!我使用了类似的东西,但我喜欢其他答案在
Promise.all()中使用地图的方式
标签: node.js google-cloud-storage