在java当中通过HttpRequest.post将InputStream流上传到minio服务器上面,并得到存储的路径
时间: 2024-10-08 14:23:11 浏览: 42
Java后端jodd.http.HttpRequest请求第三方接口代码
在Java项目中,通常使用Apache HttpClient或者Spring Boot的RestTemplate来发起HTTP POST请求并上传文件至MinIO服务器。这里以Apache HttpClient为例演示如何实现:
首先,你需要添加Apache HttpClient依赖到你的Maven项目中,如果尚未添加,可以在pom.xml中添加:
```xml
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version> <!-- 更新版本号以匹配最新稳定版 -->
</dependency>
```
接着,你可以创建一个POST方法来发送文件:
```java
import org.apache.http.HttpEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.InputStreamBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public String uploadToMinio(InputStream inputStream, String minioUrl, String bucketName, String objectName) {
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
// 创建多部分实体,包含文件和元数据
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addPart("file", new InputStreamBody(inputStream, "application/octet-stream"));
builder.addPart("metadata", new StringBody(objectName)); // 使用自定义的名字
// 构建HTTP请求
HttpPost httpPost = new HttpPost(minioUrl + "/" + bucketName);
httpPost.setEntity(builder.build());
// 发起请求并获取响应
HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
// 检查状态码并返回存储路径(假设从响应头中获取)
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_CREATED) {
return EntityUtils.toString(entity).trim(); // 储存路径可能包含在响应头部或Content Location字段
} else {
throw new RuntimeException("Failed to upload file to MinIO: " + response.getStatusLine());
}
} catch (IOException e) {
throw new RuntimeException("Error uploading file to MinIO", e);
} finally {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
在这个示例中,`inputStream`是你想上传的文件输入流,`minioUrl`是MinIO服务器的URL,`bucketName`是存储桶名称,`objectName`是文件在服务器上的名称。
注意:实际操作时,你可能需要处理更复杂的错误情况,如网络连接问题、认证验证等,并从响应中获取存储路径的具体方式取决于MinIO的API文档。上述代码仅为基本示例。
阅读全文