zj
2025-01-06 0e7b38c2b3af72ea2a7f8a2fcbaad4d78e2c1977
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
package com.gear.common.utils.oss;
import com.aliyun.oss.OSS;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.PutObjectRequest;
import com.gear.common.config.OssConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import java.io.*;
 
@Component
public class AliyunOssUtil {
    /**
     * 此处的oss是将配置文件中的参数配置后生成bean,通过自动注入来获取配置参数后的对象oss
     */
    @Autowired
    private OSS oss;
    /**
     * 为了能在每个方法中使用配置号参数的oss对象,需要将其静态化,如果oss被static修饰,则每次调用时oss都是空,所以这里需要做一下转换
     * 通过postConstruct注解将oss转为静态的ossP,这样在每次调用时都是配置好的参数的一个oss对象
     * @PostConstruct是Java自带的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。
     * @postConstruct可以修饰一个非静态的void方法,使用场景为:在生成对象时想完成某些初始化操作,初始化又依赖于自动注入,构造方法中无法实现时
     * 使用此注解修饰一个方法来实现初始化操作,注解的方法会在自动注入完成后被调用-----执行顺序--》construct构造函数-》@Autowired自动注入-》@PostConstruct
     */
    private static OSS ossP;
 
    /**
     * 默认的oss桶位置
     */
    public static final String fixedBucket = "sax-bucket-1";
 
 
    @PostConstruct
    public void ossTransfer(){
        //该方法会在上面的依赖注入后自动被调用
        ossP = oss;
    }
 
 
    /**
     * 上传字符串
     * @param objectName oss文件全路径名-默认是桶位置加全路径名,如桶位置为ossbucket,全路径名为upload/string/str.json,则数据会放到ossbucket下的upload/string包中,文件名为str.json
     * @param content 上传内容
     */
    public static void uploadString(String objectName, String content){
        PutObjectRequest putObjectRequest = new PutObjectRequest(fixedBucket, objectName, new ByteArrayInputStream(content.getBytes()));
        ossP.putObject(putObjectRequest);
    }
 
    /**
     * 上传字符串
     * @param bucketName 文件存在oss的桶名称
     * @param objectName 文件在oss中的全路径
     * @param content 上传内容
     */
    public static void uploadString(String bucketName, String objectName, String content){
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
        ossP.putObject(putObjectRequest);
    }
 
    /**
     * 上传文件
     * @param objectName 文件在oss中的全路径
     * @param filePath 上传文件的本地路径
     */
    public static void uploadFile(String objectName, String filePath){
        PutObjectRequest putObjectRequest = new PutObjectRequest(fixedBucket, objectName, new File(filePath));
        ossP.putObject(putObjectRequest);
    }
 
    /**
     * 上传文件
     * @param bucketName 文件所在oss桶名称
     * @param objectName 文件在oss中的全路径
     * @param filePath 上传文件的本地路径
     */
    public static void uploadFile(String bucketName, String objectName, String filePath){
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));
        ossP.putObject(putObjectRequest);
    }
 
    /**
     * 上传multi文件
     * @param objectName 文件全路径
     * @param multipartFile 上传的文件
     */
    public static void uploadMultipartFile(String objectName, MultipartFile multipartFile){
        byte[] bytes = new byte[0];
        try {
            bytes = multipartFile.getBytes();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        InputStream inputStream = new ByteArrayInputStream(bytes);
        PutObjectRequest putObjectRequest = new PutObjectRequest(fixedBucket, objectName, inputStream);
        ossP.putObject(putObjectRequest);
    }
 
    /**
     * multi方式上传文件
     * @param bucketName oss中桶名称
     * @param objectName 文件在oss中的全路径
     * @param multipartFile 上传的文件
     */
    public static void uploadMultipartFile(String bucketName, String objectName, MultipartFile multipartFile){
        byte[] bytes = new byte[0];
        try {
            bytes = multipartFile.getBytes();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        InputStream inputStream = new ByteArrayInputStream(bytes);
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
        ossP.putObject(putObjectRequest);
    }
 
    /**
     * 上传流数据
     * @param objectName 数据在oss中的全路径
     * @param inputStream 流数据内容
     */
    public static void uploadStream(String objectName, InputStream inputStream){
        PutObjectRequest putObjectRequest = new PutObjectRequest(fixedBucket, objectName, inputStream);
        ossP.putObject(putObjectRequest);
    }
 
    /**
     * 上传流数据
     * @param bucketName oss桶名称
     * @param objectName 数据所在oss中的全路径
     * @param inputStream 流数据
     */
    public static void uploadStream(String bucketName, String objectName, InputStream inputStream){
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
        ossP.putObject(putObjectRequest);
    }
 
    /**
     * 下载字符串数据
     * @param objectName 数据所在oss的全路径
     * @return 字符串
     * @throws IOException
     */
    public static String downloadString(String objectName) throws IOException {
        OSSObject ossObject = ossP.getObject(fixedBucket, objectName);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent()));
        StringBuilder stringBuilder = new StringBuilder();
        while (true){
            String line = bufferedReader.readLine();
            if(line==null){
                break;
            }else {
                stringBuilder.append(line);
            }
        }
        bufferedReader.close();
        return stringBuilder.toString();
    }
 
    /**
     * 下载字符串数据
     * @param bucketName oss桶位置
     * @param objectName 数据所在oss中的全路径
     * @return 返回字符串
     * @throws IOException
     */
    public static String downloadString(String bucketName, String objectName) throws IOException {
        OSSObject ossObject = ossP.getObject(bucketName, objectName);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent()));
        StringBuilder stringBuilder = new StringBuilder();
        while (true){
            String line = bufferedReader.readLine();
            if(line==null){
                break;
            }else {
                stringBuilder.append(line);
            }
        }
        bufferedReader.close();
        return stringBuilder.toString();
    }
 
    /**
     * 下载文件
     * @param objectName 数据所在oss全路径
     * @param fileName 文件名
     */
    public static void downloadFile(String objectName, String fileName){
        ossP.getObject(new GetObjectRequest(fixedBucket, objectName),new File(fileName));
    }
 
    /**
     * 下载文件
     * @param bucketName 文件所在oss桶名称
     * @param objectName  文件所在oss中的全路径
     * @param fileName 文件名
     */
    public static void downloadFile(String bucketName, String objectName, String fileName){
        ossP.getObject(new GetObjectRequest(bucketName, objectName),new File(fileName));
    }
 
    /**
     * 删除数据
     * @param objectName 删除文件的全路径
     */
    public static void delete(String objectName){
        ossP.deleteObject(fixedBucket, objectName);
    }
 
    /**
     * 删除数据
     * @param bucketName 桶名称
     * @param objectName 删除文件的全路径
     */
    public static void delete(String bucketName, String objectName){
        ossP.deleteObject(bucketName, objectName);
    }
 
    /**
     * 检查文件是否存在
     * @param objectName 文件所在oss中的全路径
     * @return 返回是否
     */
    public static boolean checkExist(String objectName){
        boolean exist = ossP.doesObjectExist(fixedBucket, objectName);
        return exist;
    }
 
    /**
     * 检查文件是否存在
     * @param bucketName 桶名称
     * @param objectName 文件所在oss中的全路径
     * @return 返回是否
     */
    public static boolean checkExist(String bucketName, String objectName){
        boolean exist = ossP.doesObjectExist(bucketName, objectName);
        return exist;
    }
 
 
}