<!-- 添加阿里云OSS SDK依赖 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun.sdk.oss}</version>
</dependency>
<properties>
<aliyun.sdk.oss>3.15.1</aliyun.sdk.oss>
</properties>
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Setter
@Getter
@ConfigurationProperties(prefix = "ali.oss")
public class AliConfig {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
}
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.ilsmp.base.util.StringUtil;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.InputStream;
import java.util.Base64;
import java.util.UUID;
@Slf4j
@Component
public class AliOssTool {
@Resource
private AliConfig aliConfig;
/**
* 文件上传OSS,返回文件访问路径
* @param base64 文件加密base64字符串
* @param suffix 文件后缀
*/
public String upload(String base64, String suffix, String fileName) throws IOException {
log.info("---文件上传oss开始: {}", fileName);
if(StringUtil.isEmpty(fileName)){
fileName = "file";
}
// base64转文件MockMultipartFile
String[] parts = base64.split(",");
String contentType = parts[0].split(";")[0].split(":")[1];
byte[] bytes = Base64.getDecoder().decode(parts[1]);
MockMultipartFile multipartFile = new MockMultipartFile(fileName, "", contentType, bytes);
// 获取上传的文件的输入流
InputStream inputStream = multipartFile.getInputStream();
// 上传文件名称,避免文件覆盖
String newFileName = UUID.randomUUID().toString().replace("-","") + suffix;
// 获取oss配置
String endpoint = aliConfig.getEndpoint();
String accessKeyId = aliConfig.getAccessKeyId();
String accessKeySecret = aliConfig.getAccessKeySecret();
String bucketName = aliConfig.getBucketName();
// 上传文件到 OSS
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
ossClient.putObject(bucketName, newFileName, inputStream);
// 拼接文件访问路径
String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + newFileName;
// 关闭ossClient
ossClient.shutdown();
log.info("---文件上传oss结束: {}", fileName);
// 把上传到OSS的路径返回
return url;
}