Jclouds swift api 直接从输入流上传对象

Jclouds swift api upload object directly from inputstream

以下代码片段可以毫无问题地将文件上传到对象存储

public void uploadObjectFromStream(String container, String name, InputStream stream) {
    SwiftApi swiftApi = getApi();
    createContainerIfAbsent(container, swiftApi);
    ObjectApi objectApi = swiftApi.getObjectApiForRegionAndContainer(REGION, container);
    Payload payload = new InputStreamPayload(stream);
    objectApi.put(name, payload, PutOptions.Builder.metadata(ImmutableMap.of("X-Object-Meta-key1", "value3", "X-Object-Meta-key2", "test"))); // test
}

如果我尝试上传 ~10Mb 文件,我会收到错误消息

o.j.h.i.HttpWire [SLF4JLogger.java:56] over limit 10485760/262144: wrote temp file
java.lang.OutOfMemoryError: Java heap space

问题是我是否可以将对象从输入流上传到对象存储而不将流保存在应用程序内存或文件系统中。

jclouds 不会缓冲 InputStream 除非您启用有线日志记录。通常这应该被禁用,除非你正在调试一个问题。