
添加依赖
<!--阿里云oss-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.17.4</version>
</dependency>
<!--阿里云oss java9以上版本要添加以下JAXB依赖-->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.3</version>
</dependency>
1、通过服务器上传
java
// 创建OSSClient实例。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// 设置签名版本为V4
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
// 端点(例如 https://oss-cn-shenzhen.aliyuncs.com) ACCESS_KEY ACCESS_KEY_SECRET
OSS ossClient = new OSSClientBuilder().build(AliConstant.ENDPOINT, AliConstant.ACCESS_KEY_ID, AliConstant.ACCESS_KEY_SECRET);
try {
// 创建PutObjectRequest对象。 存储桶名称 文件名称全路径 文件字节数组
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(file.getBytes()));
// 上传
ossClient.putObject(putObjectRequest);
//https://存储桶名称.oss-cn-shenzhen.aliyuncs.com/2025-03/e67a1e38-c83b-48f1-a17b-1db4225eae0c.jpg
return AjaxResult.success("https://存储桶名称.oss-cn-shenzhen.aliyuncs.com/".concat(objectName));
} catch (Exception oe) {
throw new ServiceException("上传失败!");
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
2、通过前端直传
后端生成临时上传url,设置过期时间,即可实现前端直接上传,不用通过服务器中转
java
/**
* 获取临时上传url
*/
@Override
public AjaxResult getTempPutUrl(String encodedTeam, String encodedMatchName) {
if (!StringUtils.hasText(encodedTeam)){
return AjaxResult.error("队伍为空");
}
if (!StringUtils.hasText(encodedMatchName)){
return AjaxResult.error("比赛为空");
}
String team = URLDecoder.decode(encodedTeam, StandardCharsets.UTF_8);
String matchName = URLDecoder.decode(encodedMatchName, StandardCharsets.UTF_8);
String endpoint = AliConstant.ENDPOINT; // 替换为实际Endpoint
String bucketName = AliConstant.BUCKET_NAME;
String objectName = matchName.concat("/").concat(team).concat("/").concat(IdUtil.fastSimpleUUID()).concat(".png");
CredentialsProvider credentialsProvider = new DefaultCredentialProvider(
AliConstant.ACCESS_KEY_ID, AliConstant.ACCESS_KEY_SECRET);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.build();
try {
// 设置URL过期时间:
Date expiration = new Date(System.currentTimeMillis() + 10 * 1000L);
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(
bucketName, objectName, HttpMethod.PUT);
request.setExpiration(expiration);
request.setProcess(null);
request.setContentType("image/png"); // 可选:指定上传时的 Content-Type
return AjaxResult.success(ossClient.generatePresignedUrl(request));
} catch (Exception e) {
e.printStackTrace();
throw new GlobalException("获取上传STS失败");
} finally {
ossClient.shutdown();
}
}