SpringBoot集成阿里云oss
594字约2分钟
2024-11-16
一、准备工作
创建阿里云账号并开通 OSS 服务:如果您还没有阿里云账号,请先注册一个账号,并确保已经开通了 OSS 服务。
获取 Access Key ID 和 Access Key Secret:在阿里云控制台中获取您的 Access Key ID 和 Access Key Secret,这些信息用于身份验证。
创建一个 OSS 存储空间(Bucket):在 OSS 控制台中创建一个存储空间,用于存储您的文件。
二、添加阿里云 OSS SDK 依赖
在 pom.xml 文件中添加阿里云 OSS SDK 的依赖:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.2</version> <!-- 请确保使用最新版本 -->
</dependency>如果使用 Gradle,请在 build.gradle 中添加:
implementation 'com.aliyun.oss:aliyun-sdk-oss:3.15.2' // 请确保使用最新版本三、配置阿里云 OSS 信息
在 application.properties 或 application.yml 中配置阿里云 OSS 的连接信息:
application.properties
aliyun.oss.endpoint=your-oss-endpoint
aliyun.oss.accessKeyId=your-access-key-id
aliyun.oss.accessKeySecret=your-access-key-secret
aliyun.oss.bucketName=your-bucket-nameapplication.yml
aliyun:
oss:
endpoint: your-oss-endpoint
accessKeyId: your-access-key-id
accessKeySecret: your-access-key-secret
bucketName: your-bucket-name四、创建 OSS 配置类
创建一个配置类,用于初始化 OSS 客户端。
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class OssConfig {
@Value("${aliyun.oss.endpoint}")
private String endpoint;
@Value("${aliyun.oss.accessKeyId}")
private String accessKeyId;
@Value("${aliyun.oss.accessKeySecret}")
private String accessKeySecret;
@Bean
public OSS ossClient() {
return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
}
}五、实现文件上传和下载服务
创建一个服务类,用于实现文件的上传和下载。
import com.aliyun.oss.OSS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
@Service
public class OssService {
@Autowired
private OSS ossClient;
@Value("${aliyun.oss.bucketName}")
private String bucketName;
public String uploadFile(MultipartFile file) throws Exception {
String fileName = file.getOriginalFilename();
InputStream inputStream = file.getInputStream();
ossClient.putObject(bucketName, fileName, inputStream);
return fileName;
}
public InputStream downloadFile(String fileName) throws Exception {
return ossClient.getObject(bucketName, fileName).getObjectContent();
}
}六、创建控制器
创建一个控制器来提供文件上传和下载的端点。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
@RestController
@RequestMapping("/oss")
public class OssController {
@Autowired
private OssService ossService;
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) {
try {
return ossService.uploadFile(file);
} catch (Exception e) {
e.printStackTrace();
return "Error occurred: " + e.getMessage();
}
}
@GetMapping("/download/{fileName}")
public void downloadFile(@PathVariable String fileName, HttpServletResponse response) {
try (InputStream stream = ossService.downloadFile(fileName)) {
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
org.apache.commons.io.IOUtils.copy(stream, response.getOutputStream());
response.flushBuffer();
} catch (Exception e) {
e.printStackTrace();
}
}
}七、测试阿里云 OSS 集成
启动 Spring Boot 应用程序,并通过以下端点测试阿里云 OSS 集成:
- 上传文件:
POST /oss/upload,通过表单数据上传文件。 - 下载文件:
GET /oss/download/{fileName},通过文件名下载文件。
