如何使用Java客户端Api将带有预签名URL的文件上传到对象存储微型模块?

时间:2019-11-19 10:28:05

标签: java minio

我想将文件上传到对象存储微型组件,该组件使用Java客户端API创建了预签名的URL。

documentation中仅指创建预签名URL或创建一些URL。是否可以使用预先签名的网址上传。

1 个答案:

答案 0 :(得分:0)

我认为您现在可能已经找到答案了,可以把它放在这里给那些可能偶然发现类似任务的人。

您可以在JAVA中使用一些不同的HTTP客户端,因此实现可能有所不同。这个想法是,一旦获得URL,就可以使用带有文件二进制内容的URL发送HTTP PUT请求,就像在任何文件上传过程中一样。据我所知,您不能直接使用PUT发送多部分文件数据,而必须发送二进制流。

以下是使用OkHttpClient上传jpeg文件的示例:

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客户端,只需要查找“通过PUT请求上传RESTful文件”或类似的内容即可。