当前位置: 首页 > 知识库问答 >
问题:

如何上传一个文件到GCS只有当它是一个特定的版本在Java?

翁心思
2023-03-14

我有一个使用GCS存储文件来上传文件的案例。我想通过使用代和前提条件(x-goog-if-generation-match)来避免竞争条件。

文件中有关于如何做到这一点的解释。

但是,我使用的是Java API,文档只显示了JSON/XML API。

共有1个答案

吕骞尧
2023-03-14

我找到的解决方案是这样做的:

    Blob object =
        storage.get(
            bucketName,
            filePath,
            Storage.BlobGetOption.fields(BlobField.GENERATION));
    long generation = object.getGeneration();

    // now do some other stuff that might cause race conditions...

    BlobId blobId = BlobId.of(bucketName, objectName, generation);
    BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setContentType("text/plain").build();
    List<Storage.BlobWriteOption> blobWriteOptions = new ArrayList<>();
    blobWriteOptions.add(BlobWriteOption.generationMatch());
    
    // in case generation don't match this will throw "StorageException: 412 Precondition Failed"
    try (WriteChannel writer =
        storage.writer(blobInfo, blobWriteOptions.toArray(new BlobWriteOption[0]))) {
            writer.write(); // etc'
      }
    }
 类似资料:
  • 如何在Google Cloud上,在特定的bucket目录(例如)中上传文件? 在Firebase中,在客户端,我做:

  • 我是maven项目的新手。我很想知道是否有可能在JAVA 1.8版上构建我的maven项目,并在JAVA 11版上运行它。简单来说,我能在JDK 1.8上编译或构建一个maven项目并在JRE 11上运行它吗?

  • 我在寻求最好的设计方法- 用例 思想 我不认为这是个好主意。主要是因为Lambda函数应该是轻量级的,并且从Lambda函数内部轮询数据库以获得所有上传文件的S3键,然后在S3中签入这些键--每次这样做似乎都很麻烦,而且非常重复。 更好的方法是什么?我在考虑使用SWF之类的东西,但不确定这是否对我的解决方案来说是过激的,或者它是否会让我做我想做的事情。文档也没有显示真正的“示例”。这只是一个讨论,

  • 我无法从Jmeter上传.zip文件。 在尝试上传文件时,我遇到如下错误, 支持的HTTP方法:POST。 请求标题: 有人能帮我上传吗?从Jmeter的zip文件,参考下面的图片为我的请求, 提前感谢。

  • 我的IntelliJ项目中有一个freemarker文件(ftl)被错误地识别为文本文件。同类型的有很多都是正确的。 我知道“标记为文本”选项。这可能是此文件被标记为文本的原始原因,但是如果确实存在此问题,则没有提供“标记为ftl文件”选项将其恢复。如果我将其他 ftl 文件标记为 txt,我可以按预期将它们重新转换为 ftl 文件。

  • 我正在调用一个客户端的下载服务,该服务发送回MIME数据,并试图保存一个zip文件。 该服务不仅返回文件本身,还返回其他几个MIME字段。所以当我使用entity.getContent()打开输入流时,我最终会将所有这些数据写入我的zip文件,而我只希望写入一部分“有效载荷”。我已经搜索过了,无论如何都看不到,只从内容中获得一个单独的部分。 代码如下: 生成的文件的内容如下所示。请注意,我只希望将