如何从应用引擎将写入附加到谷歌云存储文件?

Posted

技术标签:

【中文标题】如何从应用引擎将写入附加到谷歌云存储文件?【英文标题】:How to append write to google cloud storage file from app engine? 【发布时间】:2014-01-19 12:53:06 【问题描述】:

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

FileWriteChannel FileService.openWriteChannel(AppEngineFile file,
                                boolean lock)

但是,

GcsOutputChannel GcsService.createOrReplace(GcsFilename filename,
                               GcsFileOptions options)

似乎不是这样。

这里有什么解决办法?

【问题讨论】:

【参考方案1】:

虽然 Google Cloud Storage 对象是不可变的,但如果您需要进行有限的附加操作,可以帮助您:object compose

这个操作基本上是将同一个桶中的多个对象的内容连接到一个新名称下,例如cat file1 file2 > newfile,但不会重写数据。

因此您可以创建一个新对象,上传要附加的内容,关闭并随后在主文件末尾compose 这个新部分。

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

【讨论】:

每个对象可以组成的对象数量不再有任何限制 每次调用compose 限制为 32 个对象,但是一个好的解决方案是简单地调用upload(b), compose(a, b) > a, delete(b)【参考方案2】:

很抱歉告诉你,如果不每次都替换文件是无法完成的。

如Cloud Services docs中所述对象不变性

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

【讨论】:

以上是关于如何从应用引擎将写入附加到谷歌云存储文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用签名的 URL 将文件上传到谷歌云存储桶

从谷歌云数据存储迁移到谷歌云 sql

将文件从 AWS s3 (SSE) 存储桶复制到谷歌云

将缓冲区上传到谷歌云存储

从 Cloud Function (python) 写入 Google Cloud Storage

谷歌云存储 - 从网络下载文件