
1.上传文件import io.minio.PutObjectArgs; import java.io.FileInputStream; import java.io.InputStream; public class MinioUpload { public static void uploadFile() { try (InputStream inputStream new FileInputStream(D:/test.jpg)) { MinioUtil.getClient().putObject( PutObjectArgs.builder() .bucket(test-bucket) // 桶名必须先创建 .object(images/test.jpg) // 存到 MinIO 的路径模拟文件夹 .stream(inputStream, -1, 10485760) // 流、大小(-1自动)、分块大小(10MB) .contentType(image/jpeg) // 文件类型 .build() ); System.out.println(上传成功); } catch (Exception e) { e.printStackTrace(); } } }注意文件操作会受检异常编译器报错因为文件操作特别容易失败所以要用try-catch包裹2.文件传给浏览器/** * 直接从 MinIO 读取文件 → 传给浏览器不落地 */ GetMapping(/download/{fileName}) public void downloadFile(PathVariable String fileName, HttpServletResponse response) throws Exception { String bucketName test-bucket; // 你的桶名 // 1. 设置浏览器下载响应头 response.setContentType(application/octet-stream); response.setHeader(Content-Disposition, attachment;filename fileName); // 2. 从 MinIO 获取输入流 try (InputStream inputStream minioClient.getObject( GetObjectArgs.builder() .bucket(bucketName) .object(fileName) .build() ); // 3. 获取浏览器输出流 OutputStream outputStream response.getOutputStream()) { //4.将输入流转化为输出流 inputSream.transferTo(outputStream); } }3.minio上传大文件时的断点续传import io.minio.*; import io.minio.messages.Part; import java.io.File; import java.io.FileInputStream; import java.util.ArrayList; import java.util.List; public class MinioTraditionalMultipartUpload { // 固定配置 private static final String ENDPOINT http://localhost:9000; private static final String ACCESS_KEY minioadmin; private static final String SECRET_KEY minioadmin; private static final String BUCKET test-bucket; // 分片大小5MBMinIO 最小分片 private static final long PART_SIZE 5 * 1024 * 1024; public static void main(String[] args) throws Exception { // 1. 创建客户端 MinioClient client MinioClient.builder() .endpoint(ENDPOINT) .credentials(ACCESS_KEY, SECRET_KEY) .build(); // 要上传的大文件 File file new File(D:/bigfile.mp4); String objectName bigfile.mp4; // // 第一步初始化分片上传 → 获取 uploadId // CreateMultipartUploadResponse initResponse client.createMultipartUpload( CreateMultipartUploadArgs.builder() .bucket(BUCKET) .object(objectName) .build() ); String uploadId initResponse.uploadId(); System.out.println(初始化成功uploadId uploadId); // // 第二步循环读取文件 → 分片上传 // FileInputStream fis new FileInputStream(file); byte[] buffer new byte[(int) PART_SIZE]; ListPart partList new ArrayList(); int partNumber 1; int len; while ((len fis.read(buffer)) ! -1) { // 上传一片 UploadPartResponse response client.uploadPart( UploadPartArgs.builder() .bucket(BUCKET) .object(objectName) .uploadId(uploadId) .partNumber(partNumber) .stream(new java.io.ByteArrayInputStream(buffer), len, -1) .build() ); // 保存每片的信息必须存 partList.add(new Part(partNumber, response.etag())); System.out.println(第 partNumber 片上传完成); partNumber; } fis.close(); // // 第三步合并所有分片 → 生成完整文件 // client.completeMultipartUpload( CompleteMultipartUploadArgs.builder() .bucket(BUCKET) .object(objectName) .uploadId(uploadId) .parts(partList) .build() ); System.out.println(✅ 大文件上传完成传统分片); } }