springboot把图片上传到阿里云OSS
简介:本文讲解的是如何使用springboot把图片上传到阿里云OSS。
阿里云OSS:阿里云对象存储服务(Object Storage Service,简称OSS)是阿里云提供的一种简单、安全、可扩展的云存储服务。它可以存储和检索任意类型的文件,包括文本、图片、音频、视频等。OSS具有高可靠性和高可用性,可以在云端存储大量的数据,并且可以通过简单的API调用来访问和管理存储的对象。
OSS提供了多种存储类型,包括标准存储、低频访问存储、归档存储等,可以根据数据的访问频率和成本要求选择合适的存储类型。同时,OSS还提供了数据加密、访问控制、数据迁移、数据备份等功能,保证了数据的安全性和可靠性。
使用阿里云OSS可以实现多种应用场景,例如网站静态文件存储、大规模数据备份和归档、云端存储和传输等。无论是个人开发者还是企业用户,都可以通过阿里云OSS来存储和管理自己的数据。
本文代码演示地址:https://gitee.com/geek-li-hua/code-in-blog.git
这里是阿里云OSS的官网:https://www.aliyun.com/product/oss
这里有免费试用
点击试用之后,退出来重新搜索OSS,然后点击管理控制台。
常见一个bucket
主要是这三处地方需要配置
代码编写
项目结构
pom.xml
- 重点需要导入的依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
- 完整的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.15</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>ImageUploadOss-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ImageUploadOss-demo</name>
<description>ImageUploadOss-demo</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- Spring Boot Starter JDBC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- Project Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!-- MySQL Connector/J -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
</dependency>
<!-- MyBatis Plus Boot Starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<!-- MyBatis Plus Generator -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
关键代码
- 然后就编写好了核心的工具类
public class UploadUtil {
// 阿里域名
public static final String ALI_DOMAIN= "https://test-bucket233.oss-cn-beijing.aliyuncs.com";
public static String uploadImage(MultipartFile file) throws IOException {
if (file.isEmpty()) {
return "No file uploaded"; // 如果文件为空,则返回提示信息"未上传文件"
}
String originalFilename = file.getOriginalFilename(); // 获取原始文件名
String ext='.' + originalFilename.split("\\.")[1]; // 获取文件扩展名
String uuid = UUID.randomUUID().toString().replace("-", ""); // 生成随机UUID
String newFileName = uuid + ext; // 新文件名
// 地域节点
String endpoint = "https://oss-cn-beijing.aliyuncs.com";
String accessKeyID = "xxxxxxxxxxxxxx";
String accessKeySecret = "xxxxxxxxxxxxxxxxxx";
// OSS客户端对象
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyID, accessKeySecret);
ossClient.putObject(
"test-bucket233", // 仓库名
newFileName, // 文件名
file.getInputStream());
ossClient.shutdown();
return ALI_DOMAIN + newFileName;
}
}
- 完整的controller
@Controller
@RequestMapping("/url-database")
public class UrlDatabaseController {
/**
* 上传文件方法
*
* @param file 要上传的文件
* @return 返回上传结果
*/
@Autowired
private IUrlDatabaseService urlDatabaseService;
@PostMapping("/upload")
public Result addFile(MultipartFile file) throws IOException {
String path = UploadUtil.uploadImage(file);
if (path.equals("No file uploaded")) {
return Result.fail("No file uploaded");
}
System.out.println(path);
if (urlDatabaseService.save(new UrlDatabase(path))){
return Result.success(path);
} else {
return Result.fail("save fail");
}
}
// 路由器首页
@RequestMapping("/")
public String index(){
return "index.html";
}
}
上传成功过之后,就会出现在OSS里面。