minio實現文件上傳下載和刪除功能


https://blog.csdn.net/tc979907461/article/details/106673570?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare

minio的中文文檔:https://docs.min.io/cn/

minio安裝

  1. 首先查詢docker鏡像:
    docker search minio
    在這里插入圖片描述

  2. 選着stars最高的那個拉取:
    docker pull minio/minio
    在這里插入圖片描述

  3. 啟動minio服務器,並設置端口號,容器名,賬號和密碼:
    docker run -p 9000:9000 --name minio -e MINIO_ACCESS_KEY=tanchuntcc -e MINIO_SECRET_KEY=tanchuntcc -v /data:/data minio/minio server /data
    在這里插入圖片描述

minio操作

  1. 啟動成功后,訪問你minio的ip地址,這里我docker安裝在本機,所以是http://localhost:9000,輸入剛剛設置的賬號密碼。
    在這里插入圖片描述

  2. 登陸后右下角可以創建bucket.
    在這里插入圖片描述在這里插入圖片描述

  3. 創建多個bucket后
    在這里插入圖片描述

  4. 可以選擇編輯和刪除
    在這里插入圖片描述

  5. 可以點擊右下角上傳文件
    在這里插入圖片描述

  6. 支持各種類型的文件:
    在這里插入圖片描述

首先創建一個Springboot項目,在resources中的application.yml文件添加如下配置:

server: port: 8080 spring: servlet: multipart: enabled: true #開啟文件上傳 max-file-size: 500MB max-request-size: 500MB minio: endpoint: http://localhost:9000 #Minio服務所在地址 bucketName: tcc #存儲桶名稱 accessKey: tanchuntcc #訪問的key secretKey: tanchuntcc #訪問的秘鑰 

 

添加minio的maven依賴:

   <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>3.0.10</version> </dependency> 

 

controller的代碼如下:

@RestController("/minioDemo") public class MinioDemoController { private static final Logger LOGGER = LoggerFactory.getLogger(MinioDemoController.class); @Value("${minio.endpoint}") private String ENDPOINT; @Value("${minio.bucketName}") private String BUCKETNAME; @Value("${minio.accessKey}") private String ACCESSKEY; @Value("${minio.secretKey}") private String SECRETKEY; //文件創建 @PostMapping public String upload(MultipartFile file) { String s=null; try { MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY); //存入bucket不存在則創建,並設置為只讀 if (!minioClient.bucketExists(BUCKETNAME)) { minioClient.makeBucket(BUCKETNAME); minioClient.setBucketPolicy(BUCKETNAME, "*.*", PolicyType.READ_ONLY); } String filename = file.getOriginalFilename(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 文件存儲的目錄結構 String objectName = sdf.format(new Date()) + "/" + filename; // 存儲文件 minioClient.putObject(BUCKETNAME, objectName, file.getInputStream(), file.getContentType()); LOGGER.info("文件上傳成功!"); s=ENDPOINT + "/" + BUCKETNAME + "/" + objectName; } catch (Exception e) { LOGGER.info("上傳發生錯誤: {}!", e.getMessage()); } return s; } //文件刪除 @DeleteMapping public String delete(String name) { try { MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY); minioClient.removeObject(BUCKETNAME, name); } catch (Exception e) { return "刪除失敗"+e.getMessage(); } return "刪除成功"; } } @GetMapping public void downloadFiles(@RequestParam("filename") String filename, HttpServletResponse httpResponse) { try { MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY); InputStream object = minioClient.getObject(BUCKETNAME, filename); byte buf[] = new byte[1024]; int length = 0; httpResponse.reset(); httpResponse.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); httpResponse.setContentType("application/octet-stream"); httpResponse.setCharacterEncoding("utf-8"); OutputStream outputStream = httpResponse.getOutputStream(); while ((length = object.read(buf)) > 0) { outputStream.write(buf, 0, length); } outputStream.close(); } catch (Exception ex) { LOGGER.info("導出失敗:", ex.getMessage()); } } 

 

 

編寫好demo程序后使用postman進行測試:使用postman文件上傳時選擇body中的form-data選項,然后屬性欄里面選擇file屬性就可以實現文件上傳了。
在這里插入圖片描述

刪除文件時輸入文件的相對路徑即可刪除:
在這里插入圖片描述
導出文件時填好文件名稱,選擇save and download即可在postman中導出文件:
在這里插入圖片描述

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM