【问题标题】:How to write file on OpenStack container using JOSS如何使用 JOSS 在 OpenStack 容器上写入文件
【发布时间】:2015-07-14 07:15:41
【问题描述】:

我需要帮助,因为我需要将 JOSS 集成到现有代码中。我的代码使用 Java 8 的 Consumer 特性。

Consumer<? super GHRepository> action = repo -> {
            try {
                if(github.getRateLimit().remaining > 0) {
                    Files.write(this.path, (repo.toString() + "\n").getBytes(), StandardOpenOption.APPEND);
                    totalIteration++;
                } else {
                    logger.info("Time to pause for " + (github.getRateLimit().reset.getTime() -  new Date().getTime()));
                    //wait until rate limit is ok.
                    do {
                        Thread.sleep(60000);
                    } while(github.getRateLimit().reset.after(new Date()));

                }
            } catch (Exception e) {
                logger.error("Erreur d'écriture dans le fichier : " + e.getMessage());
            }
        };

此代码运行良好,但机器上的可用磁盘空间不足。所以我需要直接在 OpenStack 容器上写入文件。

我在文档中读到 JOSS 使用此功能上传文件。

   StoredObject object = container.getObject("dog.png");
   object.uploadObject(new File("/dog.png"));

这是上传已写入文件的方法。但是我需要将文件直接写在容器上。 uploadObject 函数可以在参数中接收一个 InputStream。所以我想用它。但我不知道如何将它与我现有的代码集成。你能帮帮我吗?

【问题讨论】:

    标签: java openstack openstack-swift


    【解决方案1】:

    好的,我找到路了。

    object.uploadObject(Files.newInputStream(Files.write(this.path, (repo.toString() + "\n").getBytes(), StandardOpenOption.APPEND)));
    

    【讨论】:

    • JOSS Swift API InputStream 实现似乎存在问题,虽然它公开了 InputStream 作为 API 的一部分,但它没有提供控制读取块大小的方法,显然它只是执行读取(来自流的所有字节)实现 - 这首先破坏了使用流的重要目的(需要堆内存等于同时上传的所有文件的总和)。
    • @DarrellTeague 不。我检查了最近发布的代码库,他们似乎从 apache common-io 复制了 IOUtils.copy(entity.getContent(), output);,它使用了 4096 字节的缓冲区大小,我认为这是最佳的。
    • 公共 API 只公开一个流并且不允许读取块大小控制。虽然服务器将(显然)每次读取最多使用 4K,但它是不可控制的,也不提供拦截器。需求问题是以任意“最大”大小停止上传(不信任发送者的 HTTP 请求标头)。最终使用 PipedInputStream 模型围绕此编写了一个实现,该模型使用可配置的缓冲区大小检查上传的总字节数:docs.oracle.com/javase/7/docs/api/java/io/PipedInputStream.html
    猜你喜欢
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多