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;
|
}
|
|
|
}
|