栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java minio上传/下载/删除文件方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java minio上传/下载/删除文件方法

1. maven依赖:

  io.minio
  minio
  6.0.13
2. yml文件配置:
minio:
  minio_url: http://127.0.0.1:9000
  minio_name: minioadmin
  minio_pass: minioadmin
  bucketName: demo
3. 代码示例:
package org.jeecg.common.util;

import io.minio.MinioClient;
import io.minio.errors.InvalidEndpointException;
import io.minio.errors.InvalidPortException;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.util.filter.StrAttackFilter;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLDecoder;



@Slf4j
public class MinioUtil {
    //minio的地址
    private static String minioUrl;
    //minio的登录用户名
    private static String minioName;
    //minio的登录密码
    private static String minioPass;
    //minio的桶名称
    private static String bucketName;

    public static void setMinioUrl(String minioUrl) {
        MinioUtil.minioUrl = minioUrl;
    }

    public static void setMinioname(String minioName) {
        MinioUtil.minioname = minioName;
    }

    public static void setMinioPass(String minioPass) {
        MinioUtil.minioPass = minioPass;
    }

    public static void setBucketName(String bucketName) {
        MinioUtil.bucketName = bucketName;
    }

    public static String getMinioUrl() {
        return minioUrl;
    }

    public static String getBucketName() {
        return bucketName;
    }

    private static MinioClient minioClient = null;

    
    public static String upload(MultipartFile file, String bizPath, String customBucket) {
        String file_url = "";
        //update-begin-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符,防止攻击
        bizPath=StrAttackFilter.filter(bizPath);
        //update-end-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符,防止攻击
        String newBucket = bucketName;
        if(oConvertUtils.isNotEmpty(customBucket)){
            newBucket = customBucket;
        }
        try {
            initMinio(minioUrl, minioName,minioPass);
            // 检查存储桶是否已经存在
            if(minioClient.bucketExists(newBucket)) {
                log.info("Bucket already exists.");
            } else {
                // 创建一个名为ota的存储桶
                minioClient.makeBucket(newBucket);
                log.info("create a new bucket.");
            }
            InputStream stream = file.getInputStream();
            // 获取文件名
            String orgName = file.getOriginalFilename();
            if("".equals(orgName)){
                orgName=file.getName();
            }
            orgName = CommonUtils.getFileName(orgName);
            String objectName = bizPath+"/"+orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.indexOf("."));

            // 使用putObject上传一个本地文件到存储桶中。
            if(objectName.startsWith("/")){
                objectName = objectName.substring(1);
            }
            minioClient.putObject(newBucket,objectName, stream,stream.available(),"application/octet-stream");
            stream.close();
            file_url = minioUrl+newBucket+"/"+objectName;
        }catch (Exception e){
            log.error(e.getMessage(), e);
        }
        return file_url;
    }

    
    public static String upload(MultipartFile file, String bizPath) {
        return  upload(file,bizPath,null);
    }

    
    public static InputStream getMinioFile(String bucketName,String objectName){
        InputStream inputStream = null;
        try {
            initMinio(minioUrl, minioName, minioPass);
            inputStream = minioClient.getObject(bucketName, objectName);
        } catch (Exception e) {
            log.info("文件获取失败" + e.getMessage());
        }
        return inputStream;
    }

    
    public static void removeObject(String objectName) {
        try {
            initMinio(minioUrl, minioName,minioPass);
            minioClient.removeObject(bucketName, objectName);
        }catch (Exception e){
            log.info("文件删除失败" + e.getMessage());
        }
    }

    
    public static String getObjectURL(String bucketName, String objectName, Integer expires) {
        initMinio(minioUrl, minioName,minioPass);
        try{
            String url = minioClient.presignedGetObject(bucketName, objectName, expires);
            return URLDecoder.decode(url,"UTF-8");
        }catch (Exception e){
            log.info("文件路径获取失败" + e.getMessage());
        }
        return null;
    }

    
    private static MinioClient initMinio(String minioUrl, String minioName,String minioPass) {
        if (minioClient == null) {
            try {
                minioClient = new MinioClient(minioUrl, minioName,minioPass);
            } catch (InvalidEndpointException e) {
                e.printStackTrace();
            } catch (InvalidPortException e) {
                e.printStackTrace();
            }
        }
        return minioClient;
    }

    
    public static String upload(InputStream stream,String relativePath) throws Exception {
        initMinio(minioUrl, minioName,minioPass);
        if(minioClient.bucketExists(bucketName)) {
            log.info("Bucket already exists.");
        } else {
            // 创建一个名为ota的存储桶
            minioClient.makeBucket(bucketName);
            log.info("create a new bucket.");
        }
        minioClient.putObject(bucketName,relativePath, stream, stream.available(),"application/octet-stream");
        stream.close();
        return minioUrl+bucketName+"/"+relativePath;
    }

    public static void putObject(String bucketName, String objectName, InputStream stream) throws Exception {
        minioClient.putObject(bucketName, objectName, stream, stream.available(), "application/octet-stream");
    }
    public static void putObject2(String bucketName, String objectName, InputStream stream,Boolean boolen) throws Exception {
        initMinio(minioUrl, minioName,minioPass);
        minioClient.putObject(bucketName, objectName, stream, stream.available(), "application/octet-stream");
    }
    
    public static void downloadFile(String folder,String wordName, HttpServletResponse response) throws IOException {
        initMinio(minioUrl, minioName,minioPass);
        try {
            // 获取文件对象
            InputStream object = minioClient.getObject(bucketName, folder+wordName);
            byte buf[] = new byte[1024];
            int length = 0;
            response.reset();
            response.addHeader("Content-Disposition", "attachment;filename=" + new String(wordName.getBytes("UTF-8"), "ISO8859-1"));
            response.setContentType("application/msword");
            response.setCharacterEncoding("UTF-8");
            OutputStream outputStream = response.getOutputStream();
            // 输出文件
            while ((length = object.read(buf)) > 0) {
                outputStream.write(buf, 0, length);
            }
            // 关闭输出流
            outputStream.close();
        } catch (Exception ex) {
            response.setHeader("Content-type", "text/html;charset=UTF-8");
            String data = "文件下载失败";
            OutputStream ps = response.getOutputStream();
            ps.write(data.getBytes("UTF-8"));
        }
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/531515.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号