peng
2026-03-24 73d124ce71e60685b19cc74a44e21dc080f7bfb6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package com.tievd.jyz.util;
 
import com.amazonaws.services.s3.model.S3Object;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
 
import java.io.InputStream;
 
/**
 * @author timi
 * 多级封装minio操作类,用于内外网minio分离
 */
@Slf4j
@Component
public class MultiMinioUtil{
    /**
     * 内部minio url
     */
    private static String serviceEndpoint;
    /**
     * 外部minio url
     */
    private static String extServiceEndpoint;
 
    private static S3Util s3Util;
 
    @Value("${init.minio.ext_minio_url:${init.minio.minio_url}}")
    public void setExtServiceEndpoint(String extServiceEndpoint) {
        MultiMinioUtil.extServiceEndpoint = extServiceEndpoint;
    }
 
    @Value("${init.minio.minio_url}")
    public void setServiceEndpoint(String serviceEndpoint) {
        MultiMinioUtil.serviceEndpoint = serviceEndpoint;
    }
 
    @Autowired
    public void setS3Util(S3Util s3Util) {
        MultiMinioUtil.s3Util = s3Util;
    }
 
    /**
     * 上传文件
     * @param file
     * @return
     */
    public static String upload(MultipartFile file){
        try {
            return s3Util.uploadObject(file.getBytes(),file.getOriginalFilename());
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return StringUtils.EMPTY;
    }
    
    /**
     * 上传文件
     * @param file
     * @return
     */
    public static String upload(byte[] bytes,String fileName){
        try {
            return s3Util.uploadObject(bytes, fileName);
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return StringUtils.EMPTY;
    }
 
    /**
     * 删除文件
     * @param bucketName
     * @param objectName
     */
    public static void removeObject(String bucketName, String objectName){
        s3Util.delFile(bucketName,objectName);
    }
 
    /**
     * 获取文件数据
     * @param bucketName
     * @param objectName
     * @return
     */
    public static InputStream getMinioFile(String bucketName, String objectName){
        try {
            S3Object s3Object = s3Util.download(objectName,bucketName);
            return s3Object.getObjectContent();
        } catch (Exception ex){
            ex.printStackTrace();
        }
        return null;
    }
 
    /**
     * 获取存储对象的url请求地址(外部访问地址)
     * @param bucketName
     * @param objectName
     * @param expires 单位秒
     * @return
     */
    public static String getObjectURL(String bucketName, String objectName, Integer expires){
        String innerUrl = s3Util.createUrl(bucketName,objectName,expires);
        //签名url 对+进行编码
        String signatureStr = StringUtils.substringAfterLast(innerUrl,"Signature=");
        String signatureEncodeStr = signatureStr.replace("+","%2B").replace("=","%3D");
        innerUrl = StringUtils.replace(innerUrl,signatureStr,signatureEncodeStr);
        return StringUtils.replace(innerUrl,MultiMinioUtil.serviceEndpoint,MultiMinioUtil.extServiceEndpoint);
    }
 
    /**
     * 获取桶名
     * @return
     */
    public static String getBucketName(){
        return s3Util.getBucketName();
    }
 
}