Я использую Jersey 2.28 и хочу написать клиент для загрузки файлов 1 ГБ, в то время как куча JVM клиента не может go выше 256 МБ.
Какие у меня есть варианты?
Я попробовал с приведенным ниже фрагментом, но получил OOM, так как кажется, что Джерси продолжает читать столько, сколько может из InputStream. Можно ли проинструктировать Джерси о гриппе sh, чтобы иметь дело с большими входами?
public Response upload(InputStream inputStream) {
Client client = ClientBuilder.newBuilder().build();
client.register(MultiPartFeature.class);
WebTarget target = client.target("http://myexample.com").path("/upload");
Invocation.Builder builder = target.request();
FormDataMultiPart form = new FormDataMultiPart();
form.bodyPart(new StreamDataBodyPart("file", inputStream, "filename.zip"));
return builder.post(Entity.entity(form, form.getMediaType()));
}
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3236)
at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:118)
at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153)
at sun.net.www.http.PosterOutputStream.write(PosterOutputStream.java:78)
at org.glassfish.jersey.message.internal.CommittingOutputStream.write(CommittingOutputStream.java:200)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$UnCloseableOutputStream.write(WriterInterceptorExecutor.java:276)