minio上传代码详解
时间: 2025-05-12 16:42:35 浏览: 25
### MinIO 文件上传代码示例
以下是基于 MinIO Java SDK 的文件上传代码示例,该代码可以用于将文件上传至 MinIO 服务器。此代码还支持通过 `Content-Disposition` 设置文件的行为(如浏览器中显示或下载),以及针对大文件的分片上传。
#### 基础环境准备
为了能够成功运行以下代码,请确保已添加 MinIO Java SDK 依赖项到项目中:
```xml
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.7</version>
</dependency>
```
---
#### 单文件上传代码示例
如果要上传单个小文件,则可以直接调用 MinIO 提供的基础方法完成操作:
```java
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
public class MinioUploadExample {
public static void main(String[] args) throws Exception {
// 初始化 MinIO 客户端实例
MinioClient minioClient = MinioClient.builder()
.endpoint("http://localhost:9000") // 替换为您的 MinIO 地址
.credentials("your-access-key", "your-secret-key") // 替换为您自己的访问密钥和秘密密钥
.build();
String bucketName = "mybucket"; // 存储桶名称
String objectName = "example.txt"; // 对象名 (即目标路径下的文件名)
String filePath = "/path/to/example.txt"; // 要上传的本地文件路径
// 执行文件上传
minioClient.putObject(
PutObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.filename(filePath)
.contentType("text/plain") // 可选:指定 MIME 类型
.build());
System.out.println("File uploaded successfully.");
}
}
```
上述代码实现了基本的小文件上传功能[^2]。
---
#### 大文件分片上传代码示例
当需要上传较大的文件时,建议采用分片上传的方式以提升效率并降低失败风险。以下是完整的分片上传流程实现:
```java
import io.minio.MinioClient;
import io.minio.UploadObjectArgs;
import java.io.File;
import java.util.concurrent.TimeUnit;
public class LargeFileUploadExample {
public static void main(String[] args) throws Exception {
// 初始化 MinIO 客户端实例
MinioClient minioClient = MinioClient.builder()
.endpoint("http://localhost:9000")
.credentials("your-access-key", "your-secret-key")
.build();
String bucketName = "mybucket";
File largeFile = new File("/path/to/largefile.mp4");
// 开始分片上传过程
long partSize = 5 * 1024 * 1024; // 每部分大小设为 5MB
UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder()
.bucket(bucketName)
.object(largeFile.getName())
.filename(largeFile.getAbsolutePath())
.partSize(partSize) // 设定每部分大小
.build();
// 使用异步方式执行分片上传
minioClient.uploadObject(uploadObjectArgs);
// 等待上传完成
TimeUnit.SECONDS.sleep(10); // 这里仅作为简单等待机制演示
System.out.println("Large file uploaded successfully.");
}
}
```
这段代码展示了如何利用 MinIO 的多线程特性来高效地上传大型文件[^5]。
---
#### 控制 Content-Disposition 行为
如果您希望通过设置 HTTP Header 来决定文件在浏览器中的行为(例如预览或强制下载),可以通过如下方式进行配置:
```java
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
public class ContentDispositionExample {
public static void main(String[] args) throws Exception {
MinioClient minioClient = MinioClient.builder()
.endpoint("http://localhost:9000")
.credentials("your-access-key", "your-secret-key")
.build();
String bucketName = "mybucket";
String objectName = "image.jpg";
String filePath = "/path/to/image.jpg";
// 配置 Content-Disposition 参数
String contentDisposition = "inline; filename=\"image.jpg\""; // 浏览器会尝试直接打开图片
minioClient.putObject(
PutObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.filename(filePath)
.headers(java.util.Collections.singletonMap("Content-Disposition", contentDisposition))
.build());
System.out.println("File with custom disposition uploaded successfully.");
}
}
```
在此例子中,我们设置了 `Content-Disposition` 属性为 `inline`,从而让浏览器尝试直接渲染图像而不是提示下载[^4]。
---
### 注意事项
- **存储桶存在性验证**:在上传之前应确认目标存储桶已经创建。
- **权限校验**:确保使用的 Access Key 和 Secret Key 具备足够的权限。
- **异常捕获**:生产环境中需加入完善的错误处理逻辑。
---
阅读全文
相关推荐


















