我想将文件上传到对象存储微型组件,该组件使用Java客户端API创建了预签名的URL。
在documentation中仅指创建预签名URL或创建一些URL。是否可以使用预先签名的网址上传。
答案 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文件”或类似的内容即可。