如何在 Spring Boot 项目中集成七牛云存储
在SpringBoot项目中集成七牛云
·
如何在 Spring Boot 项目中集成七牛云存储
在本教程中,我们将展示如何在 Spring Boot 项目中集成七牛云存储服务,实现文件上传、列举文件和删除文件等基本功能。七牛云提供强大的文件存储和管理功能,我们可以通过其 Java SDK 来方便地操作云端文件。
前置准备
1. 注册七牛云账户
首先,你需要注册并登录 七牛云官网,创建一个存储空间,并获得 Access Key 和 Secret Key。这些密钥将在接下来的代码中用于认证。
2. 创建存储空间(Bucket)
在七牛云控制台中创建一个存储空间(Bucket),并记下空间名称,这将在后续的代码中使用。
3. 配置 Maven 依赖
你需要在项目中添加七牛云 SDK 的 Maven依赖。
Maven 依赖
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<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>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
4.配置文件application.yml
spring:
thymeleaf:
prefix: classpath:/templates/
check-template-location: true
suffix: .html
encoding: UTF-8
servlet:
content-type: text/html
mode: HTML5
cache: false
servlet:
multipart:
enabled: true
max-file-size: 30MB
max-request-size: 30MB
项目结构
本项目包含以下三个主要类:
- QiniuClient:用于与七牛云进行交互的客户端,提供文件上传、删除和列举功能。
- QiniuController:控制器层,负责处理用户请求,包括文件上传、文件列表展示和文件删除。
- QiniuConstant:存储七牛云的
Access Key
、Secret Key
和Bucket Name
等常量信息。
1. 创建 QiniuClient 类
QiniuClient
类封装了与七牛云的交互。它提供了获取上传 Token、上传文件、列出文件、删除文件等方法。
package com.shihaohu.qiniuyundemo.core;
import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.FileListing;
import com.qiniu.util.Auth;
import lombok.RequiredArgsConstructor;
import java.io.FileInputStream;
import java.io.InputStream;
/**
* QiniuClient 封装七牛云操作
* @author Shihao Hu
* @date 2024/12/2 11:37
*/
@RequiredArgsConstructor
public class QiniuClient {
private final Auth auth;
private final UploadManager uploadManager;
private final BucketManager bucketManager;
private final String bucketName;
public QiniuClient(String accessKey, String secretKey, String bucketName) {
this.auth = Auth.create(accessKey, secretKey);
Zone z = Zone.autoZone();
Configuration config = new Configuration(z);
this.uploadManager = new UploadManager(config);
this.bucketManager = new BucketManager(auth, config);
this.bucketName = bucketName;
}
/**
* 获取上传 Token
*/
public String getUploadToken() {
return auth.uploadToken(bucketName);
}
/**
* 上传文件
*/
public void uploadFile(InputStream is, String key) throws QiniuException {
String uploadToken = getUploadToken();
uploadManager.put(is, key, uploadToken, null, null);
}
/**
* 列出文件
*/
public FileListing listFiles() throws QiniuException {
return bucketManager.listFiles(bucketName, null, null, 1000, null);
}
/**
* 删除文件
*/
public void deleteFile(String key) throws QiniuException {
bucketManager.delete(bucketName, key);
}
}
2. 创建 QiniuController 类
QiniuController
是负责处理文件上传、文件列表显示和文件删除的控制器类。我们为每个功能都创建了一个方法:
package com.shihaohu.qiniuyundemo.controller;
import com.qiniu.common.QiniuException;
import com.qiniu.storage.model.FileInfo;
import com.qiniu.storage.model.FileListing;
import com.shihaohu.qiniuyundemo.constant.QiniuConstant;
import com.shihaohu.qiniuyundemo.core.QiniuClient;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
/**
* 处理七牛云相关操作的控制器
* @author Shihao Hu
* @date 2024/12/2 11:37
*/
@Controller
@RequestMapping("/qiniu")
public class QiniuController {
QiniuClient qiniuClient = new QiniuClient(QiniuConstant.ACCESS_KEY, QiniuConstant.SECRET_KEY, QiniuConstant.BUCKET_NAME);
/**
* 打开上传页面
*/
@GetMapping("/upload")
public String uploadPage() {
return "/qiniu/upload";
}
/**
* 提交文件上传表单
*/
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile multipartFile, Model model) {
try {
String fileName = multipartFile.getOriginalFilename();
if (fileName == null || fileName.isEmpty()) {
throw new IllegalArgumentException("File name cannot be empty!");
}
InputStream inputStream = multipartFile.getInputStream();
qiniuClient.uploadFile(inputStream, fileName);
return "redirect:/qiniu/list";
} catch (IOException | IllegalArgumentException e) {
model.addAttribute("msg", e.getMessage());
return "error";
}
}
/**
* 列出文件清单
*/
@GetMapping("/list")
public String listFiles(Model model) {
try {
FileListing fileListing = qiniuClient.listFiles();
FileInfo[] files = fileListing.items;
model.addAttribute("fmap", files);
return "/qiniu/list";
} catch (QiniuException e) {
model.addAttribute("msg", e.getMessage());
return "error";
}
}
/**
* 删除文件
*/
@GetMapping("/delete")
public String deleteFile(@RequestParam("key") String key, Model model) {
try {
qiniuClient.deleteFile(key);
return "redirect:/qiniu/list";
} catch (QiniuException e) {
model.addAttribute("msg", e.getMessage());
return "error";
}
}
}
3. 创建 QiniuConstant 类
QiniuConstant
类用于存储七牛云的 ACCESS_KEY
、SECRET_KEY
和 BUCKET_NAME
,这些信息需要你在七牛云控制台中获取。
package com.shihaohu.qiniuyundemo.constant;
/**
* 七牛云常量类
* @author Shihao Hu
* @date 2024/12/2 11:37
*/
public interface QiniuConstant {
String ACCESS_KEY = "your-access-key"; // 请填写你自己的 Access Key
String SECRET_KEY = "your-secret-key"; // 请填写你自己的 Secret Key
String BUCKET_NAME = "your-bucket-name"; // 请填写你自己的存储空间名称
}
4. 创建 Thymeleaf 模板
上传文件页面 /resouces/templates/qiniu/upload.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>七牛文件上传</title>
</head>
<body>
<form name="uploadForm" action="/qiniu/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file"> <input type="submit" value="上传文件">
</form>
</body>
</html>
文件列表页面 /resouces/templates/qiniu/list.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>七牛文件列表</title>
</head>
<body>
<ul th:each="fitem, stat : ${fmap}">
<li><a th:href="@{${fitem.key}}"><span th:text="${fitem.key}">文件名</span></a>
<form action="/qiniu/delete" method="get">
<input type="hidden" name="key" th:value="${fitem.key}">
<input type="submit" value="删除">
</form>
</li>
</ul>
</body>
</html>
5. 启动 Spring Boot 项目
至此,所有的代码已经完成。你可以通过启动 Spring Boot 项目,访问 http://localhost:8080/qiniu/upload
页面进行文件上传,上传的文件将保存到七牛云存储中。通过 http://localhost:8080/qiniu/list
页面可以查看文件列表,并可以删除文件。
更多推荐
已为社区贡献1条内容
所有评论(0)