I have two presigned url : (GET AND PUT)
How can i transfer my file without downloading all the file in memory ?
I have to pass through a proxy for getting the data with the GET presignedUrl.
My approach but i get an error : “closed”
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
OkHttpClient getProxyClient = clientBuilder
.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("url.com", 443)))
.connectTimeout(5, TimeUnit.MINUTES)
.readTimeout(5, TimeUnit.MINUTES)
.writeTimeout(5, TimeUnit.MINUTES)
.build();
OkHttpClient putProxyClient = new OkHttpClient.Builder()
.connectTimeout(5, TimeUnit.MINUTES)
.readTimeout(5, TimeUnit.MINUTES)
.writeTimeout(5, TimeUnit.MINUTES)
.build();
Request requestGet = new Request.Builder()
.url(getPresignedUrl)
.build();
try {
Response responseGet = getProxyClient.newCall(requestGet).execute();
RequestBody requestPutBody = new RequestBody() {
@Nullable
@Override
public MediaType contentType() {
return MediaType.parse("application/octet-stream");
}
@Override
public void writeTo(@NotNull BufferedSink bufferedSink) throws IOException {
try (InputStream inputStream = responseGet.body().byteStream()) {
IOUtils.copyLarge(inputStream, bufferedSink.outputStream());
}
}
};
Request requestPut = new Request.Builder()
.url(put)
.put(requestPutBody)
.build();
Response responsePut = putProxyClient.newCall(requestPut).execute();
catch (IOException e) {
log.error("Erreur lors de la requête PUT : " + e.getMessage());
}
1