gpt4 book ai didi

java - 如何使用 Java 客户端 Api 将带有预签名 URL 的文件上传到对象存储 minio?

转载 作者:行者123 更新时间:2023-12-01 20:22:11 27 4
gpt4 key购买 nike

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

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

最佳答案

我想你现在可能已经找到答案了,我会把它放在这里,供其他可能偶然发现类似任务的人使用。

您可以在 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 的另一个示例,其中 Controller 的传入请求是 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 文件上传”或类似内容即可。

关于java - 如何使用 Java 客户端 Api 将带有预签名 URL 的文件上传到对象存储 minio?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58931843/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com