日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot配置MinIO(实现文件上传、下载、删除)

發(fā)布時(shí)間:2025/3/12 javascript 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot配置MinIO(实现文件上传、下载、删除) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 MinIO

MinIO 是一個(gè)基于Apache License v2.0開源協(xié)議的對象存儲服務(wù)。它兼容亞馬遜S3云存儲服務(wù)接口,非常適合于存儲大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等,而一個(gè)對象文件可以是任意大小,從幾kb到最大5T不等。

MinIO是一個(gè)非常輕量的服務(wù),可以很簡單的和其他應(yīng)用的結(jié)合,類似 NodeJS, Redis 或者 MySQL。

2 MinIO安裝和啟動

由于MinIO是一個(gè)單獨(dú)的服務(wù)器,需要單獨(dú)部署,有關(guān)MinIO的使用之前已經(jīng)總結(jié),有需要可以查看。

3 pom.xml(maven依賴文件)

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.5.7</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>7.0.2</version></dependency>

4 applicatin.properties(配置文件)

# 設(shè)置單個(gè)文件大小 spring.servlet.multipart.max-file-size= 50MB #minio文件服務(wù)器配置 minio.address=http://localhost:9000 minio.accessKey=admin minio.secretKey=12345678 minio.bucketName=myfile

5 MinIOService

minio有關(guān)的操作(判斷存儲桶是否存在,創(chuàng)建存儲桶,上傳文件,下載文件,刪除文件)

package com.service;import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import io.minio.MinioClient; import io.minio.PutObjectOptions; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.Date;@Data @Component public class MinIOService {@Value("${minio.address}")private String address;@Value("${minio.accessKey}")private String accessKey;@Value("${minio.secretKey}")private String secretKey;@Value("${minio.bucketName}")private String bucketName;public MinioClient getMinioClient() {try {return new MinioClient(address, accessKey, secretKey);} catch (Exception e) {e.printStackTrace();return null;}}/*** 檢查存儲桶是否存在** @param bucketName 存儲桶名稱* @return*/public boolean bucketExists(MinioClient minioClient, String bucketName) {boolean flag = false;try {flag = minioClient.bucketExists(bucketName);if (flag) {return true;}} catch (Exception e) {e.printStackTrace();return false;}return false;}/*** 創(chuàng)建存儲桶** @param bucketName 存儲桶名稱*/public boolean makeBucket(MinioClient minioClient, String bucketName) {try {boolean flag = bucketExists(minioClient, bucketName);//存儲桶不存在則創(chuàng)建存儲桶if (!flag) {minioClient.makeBucket(bucketName);}return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 上傳文件** @param file 上傳文件* @return 成功則返回文件名,失敗返回空*/public String uploadFile(MinioClient minioClient, MultipartFile file) {//創(chuàng)建存儲桶boolean createFlag = makeBucket(minioClient, bucketName);//創(chuàng)建存儲桶失敗if (createFlag == false) {return "";}try {PutObjectOptions putObjectOptions = new PutObjectOptions(file.getSize(), PutObjectOptions.MIN_MULTIPART_SIZE);putObjectOptions.setContentType(file.getContentType());String originalFilename = file.getOriginalFilename();int pointIndex = originalFilename.lastIndexOf(".");//得到文件流InputStream inputStream = file.getInputStream();//保證文件不重名(并且沒有特殊字符)String fileName = bucketName+ DateUtil.format(new Date(), "_yyyyMMddHHmmss") + (pointIndex > -1 ? originalFilename.substring(pointIndex) : "");minioClient.putObject(bucketName, fileName, inputStream, putObjectOptions);return fileName;} catch (Exception e) {e.printStackTrace();return "";}}/*** 下載文件** @param originalName 文件路徑*/public InputStream downloadFile(MinioClient minioClient, String originalName, HttpServletResponse response) {try {InputStream file = minioClient.getObject(bucketName, originalName);String filename = new String(originalName.getBytes("ISO8859-1"), StandardCharsets.UTF_8);if (StrUtil.isNotBlank(originalName)) {filename = originalName;}response.setHeader("Content-Disposition", "attachment;filename=" + filename);ServletOutputStream servletOutputStream = response.getOutputStream();int len;byte[] buffer = new byte[1024];while ((len = file.read(buffer)) > 0) {servletOutputStream.write(buffer, 0, len);}servletOutputStream.flush();file.close();servletOutputStream.close();return file;} catch (Exception e) {e.printStackTrace();return null;}}/*** 刪除文件** @param fileName 文件路徑* @return*/public boolean deleteFile(MinioClient minioClient, String fileName) {try {minioClient.removeObject(bucketName, fileName);} catch (Exception e) {e.printStackTrace();return false;}return true;}/*** 得到指定文件的InputStream** @param originalName 文件路徑* @return*/public InputStream getObject(MinioClient minioClient, String originalName) {try {return minioClient.getObject(bucketName, originalName);} catch (Exception e) {e.printStackTrace();return null;}}/*** 根據(jù)文件路徑得到預(yù)覽文件絕對地址** @param minioClient* @param fileName 文件路徑* @return*/public String getPreviewFileUrl(MinioClient minioClient, String fileName) {try {return minioClient.presignedGetObject(bucketName,fileName);}catch (Exception e){e.printStackTrace();return "";}} }

6 FileController

文件上傳、文件下載、文件刪除接口。

package com.controller;import com.service.MinIOService; import io.minio.MinioClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;@RequestMapping("/file") @RestController public class FileController {@Autowiredprivate MinIOService minIOService;/*** 上傳文件** @param file 文件* @return*/@PostMapping("/uploadFile")public String uploadFile(@RequestBody MultipartFile file) {MinioClient minioClient = minIOService.getMinioClient();if (minioClient == null) {return "連接MinIO服務(wù)器失敗";}return minIOService.uploadFile(minioClient, file);}/*** 下載文件** @param response 返回請求* @param fileName 文件路徑* @return*/@GetMapping("/downloadFile")public String downloadFile(HttpServletResponse response,@RequestParam String fileName) {MinioClient minioClient = minIOService.getMinioClient();if (minioClient == null) {return "連接MinIO服務(wù)器失敗";}return minIOService.downloadFile(minioClient, fileName, response) != null ? "下載成功" : "下載失敗";}/*** 刪除文件** @param fileName 文件路徑* @return*/@DeleteMapping("/deleteFile/{fileName}")public String deleteFile(@PathVariable("fileName") String fileName) {MinioClient minioClient = minIOService.getMinioClient();if (minioClient == null) {return "連接MinIO服務(wù)器失敗";}boolean flag = minIOService.deleteFile(minioClient, fileName);return flag == true ? "刪除成功" : "刪除失敗";} }

7 調(diào)試結(jié)果

7.1 文件上傳

7.2 文件下載

7.3 文件刪除

注:

文件刪除之后,如果該文件夾下沒有文件存在,MinIO會自動刪除該空文件夾及上級空文件夾。

總結(jié)

以上是生活随笔為你收集整理的Spring Boot配置MinIO(实现文件上传、下载、删除)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。