pom文件 :

yml配置 :

读取配置文件类 :

上传 :

完整代码 :
import cn.hutool.core.lang.UUID;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import com.luzhizheng.common.config.OSSConfig;
import lombok.SneakyThrows;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Sappy
* @date 4/6/2023 10:40:44
*/
@Component
public class AliYunOSSUtil {
private static Logger logger = LoggerFactory.getLogger(AliYunOSSUtil.class);
public static AliYunOSSUtil aliYunOSSUtil;
@PostConstruct
public void init() {
aliYunOSSUtil = this;
aliYunOSSUtil.ossConfig = this.ossConfig;
}
@Autowired
private OSSConfig ossConfig;
/**
* 上传byte数组
*
* @param objectName 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
* @param bytes Byte数组。
* @return
*/
public static String uploadByte(String objectName, byte[] bytes) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(aliYunOSSUtil.ossConfig.getEndpoint()
, aliYunOSSUtil.ossConfig.getAccessKeyId()
, aliYunOSSUtil.ossConfig.getAccessKeySecret());
String url = "";
try {
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(aliYunOSSUtil.ossConfig.getBucket()
, objectName, new ByteArrayInputStream(bytes));
// 设置该属性可以返回response。如果不设置,则返回的response为空。
// putObjectRequest.setProcess("true");
// 创建PutObject请求。
PutObjectResult result = ossClient.putObject(putObjectRequest);
// 如果上传成功,则返回200。
// System.out.println(result.getResponse().getStatusCode());
url = "https://"
+ aliYunOSSUtil.ossConfig.getBucket()
+ "."
+ aliYunOSSUtil.ossConfig.getEndpoint()
+ "/"
+ objectName;
} catch (OSSException oe) {
logger.error("请求已发送到OSS,但由于某种原因被拒绝并出现错误响应");
logger.error("Error Message:[{}]", oe.getErrorMessage());
logger.error("Error Code:[{}]", oe.getErrorCode());
logger.error("Request ID:[{}]", oe.getRequestId());
logger.error("Host ID:[{}]", oe.getHostId());
} catch (ClientException ce) {
logger.error("客户端在尝试与OSS通信时遇到问题");
logger.error("Error Message:[{}]", ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
return url;
}
/**
* 上传网络流
*
* @param objectName 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
* @param url 网络流地址
* @return
*/
public static String uploadUrl(String objectName, String url) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(aliYunOSSUtil.ossConfig.getEndpoint()
, aliYunOSSUtil.ossConfig.getAccessKeyId()
, aliYunOSSUtil.ossConfig.getAccessKeySecret());
String fileUrl = "";
try {
InputStream inputStream = new URL(url).openStream();
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(aliYunOSSUtil.ossConfig.getBucket()
, objectName, inputStream);
// 设置该属性可以返回response。如果不设置,则返回的response为空。
// putObjectRequest.setProcess("true");
// 创建PutObject请求。
PutObjectResult result = ossClient.putObject(putObjectRequest);
// 如果上传成功,则返回200。
// System.out.println(result.getResponse().getStatusCode());
fileUrl = "https://"
+ aliYunOSSUtil.ossConfig.getBucket()
+ "."
+ aliYunOSSUtil.ossConfig.getEndpoint()
+ "/"
+ objectName;
} catch (OSSException oe) {
logger.error("请求已发送到OSS,但由于某种原因被拒绝并出现错误响应");
logger.error("Error Message:[{}]", oe.getErrorMessage());
logger.error("Error Code:[{}]", oe.getErrorCode());
logger.error("Request ID:[{}]", oe.getRequestId());
logger.error("Host ID:[{}]", oe.getHostId());
} catch (ClientException ce) {
logger.error("客户端在尝试与OSS通信时遇到问题");
logger.error("Error Message:[{}]", ce.getMessage());
} catch (MalformedURLException e) {
logger.error("url解析异常");
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
return fileUrl;
}
/**
* 上传本地文件
*
* @param folder 目录需以正斜线结尾 如:"exampledir/"。
* @param file file
* @return
*/
@SneakyThrows
public static String upload(String folder, File file) {
FileInputStream is = null;
String url = "";
OSS ossClient = new OSSClientBuilder().build(aliYunOSSUtil.ossConfig.getEndpoint()
, aliYunOSSUtil.ossConfig.getAccessKeyId()
, aliYunOSSUtil.ossConfig.getAccessKeySecret());
try {
String absolutePath = file.getAbsolutePath();
String fileName = file.getName();
is = new FileInputStream(absolutePath);
ObjectMetadata metadata = new ObjectMetadata();
int indexOfLastDot = fileName.lastIndexOf(".");
String suffix = fileName.substring(indexOfLastDot);
metadata.setContentType(getContentType(suffix));
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
fileName = uuid + suffix;
String datePath = DateTimeFormatter.ISO_DATE.format(LocalDate.now());
fileName = folder + datePath + "/" + fileName;
PutObjectRequest putObjectRequest = new PutObjectRequest(aliYunOSSUtil.ossConfig.getBucket(), fileName, is);
//设置ContentType,预览
putObjectRequest.setMetadata(metadata);
ossClient.putObject(putObjectRequest);
url = "https://"
+ aliYunOSSUtil.ossConfig.getBucket()
+ "."
+ aliYunOSSUtil.ossConfig.getEndpoint()
+ "/"
+ fileName;
} catch (OSSException oe) {
logger.error("请求已发送到OSS,但由于某种原因被拒绝并出现错误响应");
logger.error("Error Message:[{}]", oe.getErrorMessage());
logger.error("Error Code:[{}]", oe.getErrorCode());
logger.error("Request ID:[{}]", oe.getRequestId());
logger.error("Host ID:[{}]", oe.getHostId());
} catch (ClientException ce) {
logger.error("客户端在尝试与OSS通信时遇到问题");
logger.error("Error Message:[{}]", ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
return url;
}
/**
* MultipartFile上传
*
* @param folder 目录需以正斜线结尾 如:"exampledir/"。
* @param multipartFile multipartFile
* @return
*/
@SneakyThrows
public static String upload(String folder, MultipartFile multipartFile) {
InputStream inputStream = null;
OSS ossClient = new OSSClientBuilder().build(aliYunOSSUtil.ossConfig.getEndpoint(),
aliYunOSSUtil.ossConfig.getAccessKeyId(), aliYunOSSUtil.ossConfig.getAccessKeySecret());
String url = "";
try {
inputStream = multipartFile.getInputStream();
String fileName = multipartFile.getOriginalFilename();
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
ObjectMetadata metadata = new ObjectMetadata();
int indexOfLastDot = fileName.lastIndexOf(".");
String suffix = fileName.substring(indexOfLastDot);
fileName = uuid + suffix;
String datePath = DateTimeFormatter.ISO_DATE.format(LocalDate.now());
// 拼接fileName , 文件夹1/文件夹2/文件名.jpg
fileName = folder + datePath + "/" + fileName;
metadata.setContentT