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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

minio实现文件上传下载和删除功能

發布時間:2025/3/12 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 minio实现文件上传下载和删除功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

之前用到文件上傳功能,在這里做個學習記錄。使用minio實現,后面會記錄使用fastdfs和阿里云的oss實現文件上傳以及他們的比較(oss根據流量收費)。minio的中文文檔:https://docs.min.io/cn/

minio安裝

  • 首先查詢docker鏡像:
    docker search minio
  • 選著stars最高的那個拉取:
    docker pull minio/minio
  • 啟動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操作

  • 啟動成功后,訪問你minio的ip地址,這里我docker安裝在本機,所以是http://localhost:9000,輸入剛剛設置的賬號密碼。
  • 登陸后右下角可以創建bucket.
  • 創建多個bucket后
  • 可以選擇編輯和刪除
  • 可以點擊右下角上傳文件
  • 支持各種類型的文件:
  • Java客戶端

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

    server:port: 8080spring:servlet:multipart:enabled: true #開啟文件上傳max-file-size: 500MBmax-request-size: 500MBminio:endpoint: http://localhost:9000 #Minio服務所在地址bucketName: tcc #存儲桶名稱accessKey: tanchuntcc #訪問的keysecretKey: 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;//文件創建@PostMappingpublic 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;}//文件刪除@DeleteMappingpublic String delete(String name) {try {MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY);minioClient.removeObject(BUCKETNAME, name);} catch (Exception e) {return "刪除失敗"+e.getMessage();}return "刪除成功";} }@GetMappingpublic 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中導出文件:

    總結

    以上是生活随笔為你收集整理的minio实现文件上传下载和删除功能的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。