Я думаю, что вы, вероятно, уже получили ответ, поместите его здесь для других, которые могли наткнуться на подобную задачу.
Существует несколько различных HTTP-клиентов, которые можно использовать в JAVA, поэтому реализации могут различаться. Идея состоит в том, что как только вы получите URL-адрес, нужно просто отправить запрос HTTP PUT
, используя URL-адрес с двоичным содержимым файла, как вы делаете в любой процедуре загрузки файла. Насколько я знаю, вы не можете напрямую отправлять составные данные файла, используя PUT
, вы должны отправлять двоичный поток.
Вот пример загрузки файла jpeg с OkHttpClient
:
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("image/jpeg");
RequestBody body = RequestBody.create(mediaType, "<file contents here>");
Request request = new Request.Builder()
.url("<minio presigned url here>")
.method("PUT", body)
.addHeader("Content-Type", "image/jpeg")
.build();
Response response = client.newCall(request).execute();
Другой пример со Spring RestTemplate
, где входящий запрос к контроллеру — это MultipartFile
. Если это объект File
, вы можете использовать свой любимый служебный метод, такой как byte[] org.apache.commons.io.FileUtils.readFileToByteArray(File file)
, чтобы получить массив байтов из этого файла.
HttpHeaders headers = new HttpHeaders();
HttpEntity<byte[]> entity = new HttpEntity<>(multipartFile.getBytes(), headers);
restTemplate.exchange(new URI("<presignedUrl>"),
org.springframework.http.HttpMethod.PUT, entity, Void.class);
Вы можете искать свой конкретный HTTP-клиент, просто нужно искать «Загрузка файла RESTful с запросом PUT» или что-то подобное.
person
Zobayer Hasan
schedule
22.04.2020