(个人学习记录)
具体的开通阿里云oss在这里就不进行演示了。
一、创建一个bucket
这里我们直接快速创建一个。
点击快速创建,输入自己的bucket名称。
点击完成创建。

可以通过下面的图片看到,这里已经创建成功了。

二、我们创建AccessKey 获取AccessKey Secret 。
点击如下创建按钮进行创建,创建成功后会获取到AccessKey和AccessKey Secret。要记住AccessKey Secret。因为我已经有2个AccessKey了,所以好像不能创建了。

三、java后端通过代码进行上传
进行依赖的导入
XML
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.0</version> <!-- 可根据实际情况选择合适版本,到Maven中央仓库查看最新版本 -->
</dependency>
在yml文件里面进行oss的配置:
java
# OSS 配置
aliyun:
oss:
# 访问密钥 ID(必填,从阿里云控制台获取)
access-key-id: LTAI****************** # 替换为你的 AccessKeyId
# 访问密钥 Secret(必填,从阿里云控制台获取)
access-key-secret: i************************ # 替换为你的 AccessKeySecret
# OSS 地域节点 Endpoint(必填,例如:华东 1 为 oss-cn-hangzhou.aliyuncs.com)
endpoint: oss-cn-hangzhou.aliyuncs.com # 替换为你的 Endpoint
# Bucket 名称(必填,存储文件的容器名称)
bucket-name: hangyuli # 替换为你的 Bucket 名称
# 访问文件的基础路径(可选,通常为 Bucket 对应的域名或 CDN 域名,用于拼接文件 URL)
url-prefix: https://hangyuli.oss-cn-hangzhou.aliyuncs.com # 可选,根据实际情况填写
#设置上传文件的大小
spring:
servlet:
multipart:
max-file-size: 10MB # 单个文件最大大小(可根据需求调整,如 50MB、100MB)
max-request-size: 100MB # 单次请求所有文件的总大小(需大于等于 max-file-size)
创建一个oss的工具类:OssUtil类
我们在OssUtil类里面进行上传文件的逻辑代码编写。
java
package org.example.utils;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
@Component
@ConfigurationProperties(prefix = "aliyun.oss") // 绑定配置前缀
public class OssUtil {
// 从配置文件注入参数
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
private String urlPrefix;
// OSS客户端(全局单例)
private OSS ossClient;
// 初始化OSS客户端(项目启动时执行)
@PostConstruct
public void init() {
ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
}
/**
* 上传文件到OSS
* @param file 待上传的文件(MultipartFile)
* @param folder 上传到OSS的文件夹路径(如 "images/")
* @return 上传后的文件URL
*/
public String upload(MultipartFile file, String folder) throws IOException {
// 1. 获取原始文件名,提取后缀(如 "jpg")
String originalFilename = file.getOriginalFilename();
System.out.println("原始文件名:" + originalFilename);
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
System.out.println("文件后缀:" + suffix);
// 2. 生成唯一文件名(避免重名覆盖)
String fileName = folder + UUID.randomUUID().toString() + suffix;
System.out.println("最终文件名:" + fileName);
// 3. 获取文件输入流,上传到OSS
try (InputStream inputStream = file.getInputStream()) {
ossClient.putObject(bucketName, fileName, inputStream);
}
// 4. 返回文件访问URL(拼接前缀 + 文件名)
return urlPrefix + "/"+fileName;
}
/**
* 删除OSS上的文件
* @param filePath 文件在OSS中的完整路径(如 "images/uuid.jpg")
*/
public void delete(String filePath) {
ossClient.deleteObject(bucketName, filePath);
}
// Getter和Setter(必须,否则@ConfigurationProperties无法绑定)
public void setEndpoint(String endpoint) { this.endpoint = endpoint; }
public void setAccessKeyId(String accessKeyId) { this.accessKeyId = accessKeyId; }
public void setAccessKeySecret(String accessKeySecret) { this.accessKeySecret = accessKeySecret; }
public void setBucketName(String bucketName) { this.bucketName = bucketName; }
public void setUrlPrefix(String urlPrefix) { this.urlPrefix = urlPrefix; }
}
创建一个controller来进行请求的处理:
java
@Autowired
private OssUtil ossUtil;
/**
* 处理文件上传请求
* @param file 前端上传的文件
* @return 上传结果(包含文件URL)
*/
@PostMapping("/upload")
public Map<String, Object> uploadFile(@RequestParam("file") MultipartFile file) {
Map<String, Object> result = new HashMap<>();
try {
// 上传到OSS的"images/"文件夹下
String fileUrl = ossUtil.upload(file, "images/");
result.put("success", true);
result.put("url", fileUrl); // 返回文件访问URL
} catch (IOException e) {
result.put("success", false);
result.put("message", "上传失败:" + e.getMessage());
}
return result;
}
最后进行测试检验是否成功:
我们启动该程序,通过apifox来发送请求,看是否能成功上传文件:
选择post请求,在请求体里面选择form-data,填入参数名称和选择要上传的文件,我这里选择的是一个视频文件。(不要超过我们设置的最大上传文件大小,不然会报错),如果成功返回地址,那么就上传成功。

从下面的图片可以看到,已经上传成功了

apifox也已经成功返回了文件的存储地址

我们进入到ossl里面进行查看
可以看到文件已经成功上传了。