1. 介绍阿里云OSS
阿里云对象存储服务(Object Storage Service,简称OSS)是阿里云提供的海量、安全、低成本、高可靠的云存储服务,致力于为各类网站、移动应用、大型企业等提供文件存储和处理服务。
2. 准备工作
- 注册阿里云账号
登录阿里云官网阿里云-计算,为了无法计算的价值 (aliyun.com),注册账号。
- 创建并配置OSS Bucket
点击控制台,进入控制台页面,点击左上角导航栏,弹出左侧菜单,选择对象存储oss,点击开通服务,完成之后,点击Bucket列表,创建Bucakt,进入创建Bucakt页面,自己起一个Bucket名称,重点是读写权限一定要选择公共读,其余默认即可,点击完成创建,完成之后,页面会自动显示刚刚创建的Bucket的基本信息及域名地址,域名地址和Bucket名称在后面写代码时会用到。
- 生成Access Key和Secret Key
将鼠标移到右上角的头像,会自动弹出一个下拉框,点击AccessKey管理,进入AccessKey管理页面,选择创建AccessKey,创建AccessKey后会自动生成Access Key和Secret Key,这个一定记得找个地方保存下来,在后面写代码时会用到。
3.安装
首先,需要在项目的 Maven 配置文件(pom.xml)中添加 PageHelper 的依赖:在Maven工程中使用OSS Java SDK,只需在pom.xml中加入相应依赖即可。以在<dependencies>中加入3.17.4版本的依赖为例:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.17.4</version>
</dependency>
如果使用的是Java 9及以上的版本,则需要添加JAXB相关依赖。添加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>
<!-- no more than 2.3.3-->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.3</version>
</dependency>
4.配置
创建阿里云工具类
package demo.util;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
/**
* OSS 上传工具类,用于处理文件上传至阿里云 OSS 存储服务。
*/
@Component
public class OssUploadUtil {
// OSS 服务端点,应替换为实际的 OSS 地址
private String endpoint = "你自己的域名地址";
// OSS Bucket 名称,应替换为实际的 Bucket 名称
private String bucketName = "你自己的";
// Access Key ID,应替换为实际的 Access Key ID
private String accessKeyId = "你自己的Access Key ID";
// Access Key Secret,应替换为实际的 Access Key Secret
private String accessKeySecret = "你自己的Access Key Secret";
/**
* 上传文件到 OSS。
*
* @param file 待上传的文件
* @return 文件的访问 URL
* @throws IOException 如果文件读取或上传失败
*/
public String upload(MultipartFile file) throws IOException {
// 检查文件是否为空
if (file.isEmpty()) {
throw new IllegalArgumentException("File must not be empty");
}
// 获取上传的文件的输入流
InputStream inputStream = file.getInputStream();
// 获取原始文件名
String fileName = file.getOriginalFilename();
// 检查文件名是否有效
if (fileName == null || fileName.isEmpty()) {
throw new IllegalArgumentException("File name is invalid");
}
// 查找文件名中的最后一个点,用于提取文件扩展名
int dotIndex = fileName.lastIndexOf(".");
// 提取文件扩展名
String extension = "";
if (dotIndex > 0) { // 确保文件名中存在点,但不包括文件名最后的点
extension = fileName.substring(dotIndex); // 包括点字符作为扩展名的一部分
}
// 生成随机文件名,避免文件覆盖
String uuid = UUID.randomUUID().toString().replace("-", "") + extension;
// 创建 OSS 客户端并上传文件
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
ossClient.putObject(bucketName, uuid, inputStream);
// 构造文件的访问 URL
String fullEndpoint = "https://oss-cn-beijing.aliyuncs.com"; // 包含协议头的完整端点
String url = fullEndpoint.replaceFirst("https?://", "") + "/" + uuid;
// 关闭 OSS 客户端连接
ossClient.shutdown();
// 返回文件的访问 URL
return url;
}
}
5.实现
编写controller层代码
package demo.controller;
import demo.util.OssUploadUtil;
import demo.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
/**
* Upload类负责处理文件上传的请求。
* 它利用OSS(Object Storage Service)上传工具将文件上传到云端。
*/
@RestController
public class Upload {
/**
* 自动注入OssUploadUtil实例,用于文件上传操作。
*/
@Autowired
private OssUploadUtil ossUploadUtil;
/**
* 处理文件上传的请求。
*
* @param file 上传的文件对象。
* @return 返回文件的URL地址。
* @throws IOException 如果文件上传过程中发生错误。
*/
@PostMapping("/upload")
public Result upload(MultipartFile file) throws IOException {
// 调用OSS上传工具,将文件上传到云端,并返回文件的URL地址。
String url = ossUploadUtil.upload(file);
// 构造上传成功的返回结果,包含文件的URL地址。
return Result.success(url);
}
}
6.测试
测试时一定是POST请求,选择Body,form-data格式,将类型改为file类型,选择文件上传,点击发送,成功接收文件路径地址,此时返回阿里云,在自己创建的Bucket下面找到服务列表,也可以看到自己上传的文件。