minio实现文件上传下载和删除功能
生活随笔
收集整理的這篇文章主要介紹了
minio实现文件上传下载和删除功能
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
前言
之前用到文件上傳功能,在這里做個學習記錄。使用minio實現(xiàn),后面會記錄使用fastdfs和阿里云的oss實現(xiàn)文件上傳以及他們的比較(oss根據(jù)流量收費)。minio的中文文檔:https://docs.min.io/cn/
minio安裝
docker search minio
docker pull 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操作
Java客戶端
首先創(chuàng)建一個Springboot項目,在resources中的application.yml文件添加如下配置:
server:port: 8080spring:servlet:multipart:enabled: true #開啟文件上傳max-file-size: 500MBmax-request-size: 500MBminio:endpoint: http://localhost:9000 #Minio服務(wù)所在地址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;//文件創(chuàng)建@PostMappingpublic String upload(MultipartFile file) {String s=null;try {MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY);//存入bucket不存在則創(chuàng)建,并設(shè)置為只讀if (!minioClient.bucketExists(BUCKETNAME)) {minioClient.makeBucket(BUCKETNAME);minioClient.setBucketPolicy(BUCKETNAME, "*.*", PolicyType.READ_ONLY);}String filename = file.getOriginalFilename();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// 文件存儲的目錄結(jié)構(gòu)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("上傳發(fā)生錯誤: {}!", 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屬性就可以實現(xiàn)文件上傳了。
刪除文件時輸入文件的相對路徑即可刪除:
導出文件時填好文件名稱,選擇save and download即可在postman中導出文件:
總結(jié)
以上是生活随笔為你收集整理的minio实现文件上传下载和删除功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rust(58)-凯撒密码
- 下一篇: rust(60)-opencv(1)