【发布时间】:2022-11-14 02:13:36
【问题描述】:
(Node.js API)
我正在尝试执行以下操作:
- 生成文件路径,如
/uploads/${uuid.v4()}.extension - 写入文件。
这是代码:
const path = `/uploads/${uuidv4()}.${extname(fileName)}`; const file = bucket.file(path); await new Promise((resolve, reject) => data .pipe(file.createWriteStream({ contentType })) .once('error', reject) .once('finish', resolve), );它工作正常。但是让我烦恼的是,生成相同 UUID 的可能性微乎其微。这不是一个实际问题。
如何将数据上传到 Cloud Storage,但如果发生冲突会出现错误?我可以事先检查文件是否存在,但技术上仍然存在竞争条件......
【问题讨论】:
-
我想知道对象版本控制是否有一些可能性?请参阅... cloud.google.com/storage/docs/object-versioning 如果我正确地理解了这一点,那么如果创建了两个相互重叠的 GCS 对象并且正在运行对象版本控制,那么我们可以(理论上)通过向 GCS 询问是否发生了碰撞文件的详细信息,包括其版本。我在想象两个同名的 GCS 文件被同时创建......当我们稍后查询“文件”时,我们会发现它有两个版本。
-
@Kolban 那么每个上传客户端如何调和他们可能已经上传了 n>1 版本的对象的事实,并弄清楚如何从中回退?不是微不足道的。如果没有事务性 API,每个人都只是盲目地上传新版本。
标签: google-cloud-platform google-cloud-storage