【问题标题】: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)

似乎不是这样。

这里有什么解决办法?

【问题讨论】:

    标签: google-app-engine google-cloud-storage


    【解决方案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 中的对象,因为覆盖操作实际上是删除对象操作,然后是上传对象操作。因此,一次覆盖操作只是标志着一个不可变对象生命周期的结束和一个新不可变对象生命周期的开始。

    【讨论】:

      猜你喜欢
      • 2015-02-01
      • 1970-01-01
      • 2014-10-30
      • 2012-10-13
      • 2018-05-09
      • 2013-05-17
      • 1970-01-01
      • 2012-03-03
      • 1970-01-01
      相关资源
      最近更新 更多