springboot实现阿里云oss文件上传下载
时间: 2025-01-10 10:25:43 浏览: 178
### 使用 Spring Boot 实现阿里云 OSS 文件上传和下载
#### 1. 添加依赖项
为了集成阿里云 OSS,需在 `pom.xml` 中引入相应的 Maven 依赖:
```xml
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.0</version>
</dependency>
```
此版本号可根据实际需求调整。
#### 2. 配置文件设置
在项目的 `application.yml` 或者 `application.properties` 文件中加入如下配置来指定访问密钥和其他必要参数[^4]:
对于 YAML 格式的配置文件:
```yaml
aliyun:
oss:
endpoint: https://oss-cn-beijing.aliyuncs.com
accessKeyId: 自己的accessKeyId
accessKeySecret: 自己的accessKeySecret
bucketName: 自己的bucketName
```
而对于属性格式,则应按照以下方式书写[^5]:
```properties
aliyun.endpoint=https://自己的Bucket域名
aliyun.accessKeyId=阿里云账号AccessKey
aliyun.accessKeySecret=阿里云账号AccessKey对应的秘钥
aliyun.bucketName=Bucket名称
```
#### 3. 创建服务类用于处理上传操作
定义一个名为 `OssService.java` 的 Java 类来进行具体的业务逻辑编码。这里展示了一个简单的例子,其中包含了上传方法[^2]。
```java
@Service
public class OssService {
private final String ENDPOINT;
private final String ACCESS_KEY_ID;
private final String ACCESS_KEY_SECRET;
private final String BUCKET_NAME;
@Autowired
public OssService(@Value("${aliyun.oss.endpoint}") String endpoint,
@Value("${aliyun.oss.accessKeyId}") String accessKeyId,
@Value("${aliyun.oss.accessKeySecret}") String accessKeySecret,
@Value("${aliyun.oss.bucketName}") String bucketName){
this.ENDPOINT = endpoint;
this.ACCESS_KEY_ID = accessKeyId;
this.ACCESS_KEY_SECRET = accessKeySecret;
this.BUCKET_NAME = bucketName;
}
/**
* 将 MultipartFile 对象保存至阿里云 OSS 并返回其 URL 地址
*/
public String uploadFile(MultipartFile file) throws Exception{
// 初始化客户端实例
OSSClient client = new OSSClient(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
try {
InputStream inputStream = file.getInputStream();
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(file.getContentType());
PutObjectResult result = client.putObject(BUCKET_NAME, file.getName(), inputStream, metadata);
return "https://" + BUCKET_NAME + "." + ENDPOINT + "/" + file.getName();
} finally {
if (client != null) {
client.shutdown();
}
}
}
}
```
#### 4. 控制器层接口设计
编写 RESTful API 来接收前端传来的文件并调用上述的服务完成上传工作。下面给出的是基于 Spring MVC 注解风格的一个控制器片段。
```java
@RestController
@RequestMapping("/api/file")
public class FileController {
@Autowired
private OssService ossService;
@PostMapping("/upload")
public ResponseEntity<Map<String,Object>> handleUpload(@RequestParam("file") MultipartFile file)throws IOException{
Map<String,Object> resultMap=new HashMap<>();
String url = ossService.uploadFile(file);
resultMap.put("code",200);
resultMap.put("msg","success");
resultMap.put("data",url);
return ResponseEntity.ok(resultMap);
}
}
```
#### 5. 下载功能实现
同样可以在同一个控制台添加另一个 POST 请求映射路径 `/download`, 接收对象名作为请求体的一部分传递给后台程序去获取对应资源链接供浏览器重定向打开或直接响应二进制流让用户下载[^1].
```java
@PostMapping("/download")
public void download(HttpServletResponse response,@RequestBody DownloadRequest request) throws Exception{
OSSClient client=null;
try{
client =new OSSClient(ACCESS_KEY_ID,ACCESS_KEY_SECRET,ENDPOINT );
OSSObject object = client.getObject(new GetObjectRequest(BUCKET_NAME,request.getKey()));
ServletOutputStream outputStream=response.getOutputStream();
IOUtils.copy(object.getObjectContent(),outputStream);
outputStream.flush();
}finally {
if(client!=null){
client.shutdown();
}
}
}
@Data
class DownloadRequest{
private String key; // 对象键(即文件名)
}
```
阅读全文
相关推荐
















