Jclouds swift api直接从inputstream上载对象

Jclouds swift api直接从inputstream上载对象,swift,inputstream,jclouds,Swift,Inputstream,Jclouds,下面的代码段将文件上载到对象存储,没有任何问题 public void uploadObjectFromStream(String container, String name, InputStream stream) { SwiftApi swiftApi = getApi(); createContainerIfAbsent(container, swiftApi); ObjectApi objectApi = swiftApi.getObjectApiForRegi

下面的代码段将文件上载到对象存储,没有任何问题

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
,除非启用连线日志记录。通常,除非您正在调试问题,否则应该禁用此选项。

您的java配置了多少堆?另外,您使用的是哪个版本的jclouds?我用'-Xmx 1024m'配置了tomcat catalina.sh。我发现jcloud的代码片段并没有引起问题。我在单独的项目中运行了代码,它在几秒钟内复制了1Gb的文件流。我将在明天编辑这个问题JClouds不会缓冲InputStream,除非您启用连线日志记录。通常应该禁用此功能,除非您正在调试问题。我没有禁用日志记录。将日志记录级别提高到INFO解决了这个问题。