Jclouds swift api直接从inputstream上传对象

时间:2015-01-14 10:59:38

标签: swift inputstream jclouds

以下代码段将文件上传到对象存储区没有任何问题

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

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

1 个答案:

答案 0 :(得分:0)

除非启用线路记录,否则jclouds不会缓冲InputStream。通常,除非您正在调试问题,否则应禁用此功能。