如何从应用程序引擎追加写入到谷歌云存储文件?

问题描述 投票:0回答:3

此已弃用的 API 支持将内容附加到谷歌云存储文件:

FileWriteChannel FileService.openWriteChannel(AppEngineFile file,
                                boolean lock)

但是,

GcsOutputChannel GcsService.createOrReplace(GcsFilename filename,
                               GcsFileOptions options)

看来不是这样。

这里的解决方案是什么?

google-app-engine google-cloud-storage
3个回答
18
投票

很遗憾地告诉您,如果不每次都替换文件,这是不可能完成的。

云服务文档中所述对象不变性

对象是不可变的,这意味着上传的对象在其存储生命周期内不能更改。对象的存储生命周期是指成功创建(上传)对象到成功删除对象之间的时间。实际上,这意味着您无法对对象进行增量更改,例如追加操作或截断操作。但是,可以覆盖存储在 Google Cloud Storage 中的对象,因为覆盖操作实际上是删除对象操作,紧接着是上传对象操作。因此,单个覆盖操作仅标志着一个不可变对象生命周期的结束和新不可变对象生命周期的开始。


17
投票

虽然 Google Cloud Storage 对象是不可变的,但如果您需要执行有限的附加操作,有一些东西 可以 为您提供帮助:对象组合

此操作基本上将同一存储桶中的多个对象的内容连接到一个新名称下,如

cat file1 file2 > newfile
,但不重写数据。

因此,您可以创建一个新对象,上传要附加到其上的内容,关闭,然后

compose
这个新片段位于主文件的末尾。

有一个警告:每个对象最多允许 1024 个“片段”,并且组合本身组合的对象算作组合原始片段(因此您不能通过迭代组合来欺骗限制)。


0
投票

非常老的问题,但是您现在可以通过利用组合功能来做到这一点(在读取/写入数据时将文件保存为一堆小文件,然后在最后将它们全部组合起来)-https://googleapis .dev/nodejs/storage/latest/Bucket.html#combine

© www.soinside.com 2019 - 2024. All rights reserved.