SpringBoot整合七牛云上傳圖片的示例代碼
在個(gè)人的一個(gè)項(xiàng)目中有一些需求需要用到圖片文件上傳,那么相比于阿里云我選擇了七牛云,主要還是想白嫖,哈哈。
七牛云每個(gè)月有一定的免費(fèi)額度,對(duì)于目前我的項(xiàng)目來(lái)說(shuō)還是足夠用的

阿里云OSS個(gè)人理解是上傳不收費(fèi),但是訪問(wèn)就會(huì)產(chǎn)生費(fèi)用
開通七牛云
注冊(cè)登錄七牛云:https://sso.qiniu.com/

進(jìn)入管理控制臺(tái)

選擇資源管理→新建存儲(chǔ)空間

進(jìn)入空間管理之后,點(diǎn)擊【+新建空間】

右側(cè)設(shè)置【空間名稱】,【區(qū)域】,【訪問(wèn)控制】

空間創(chuàng)建完之后,七牛云會(huì)給一個(gè)具有一個(gè)月時(shí)限的測(cè)試域名,也可以綁定備案的域名。

到這里,七牛云的對(duì)象存儲(chǔ)空間就設(shè)置成功了。
七牛云開發(fā)文檔
官方文檔地址:https://developer.qiniu.com/kodo/1239/java
點(diǎn)擊【文檔】→【開發(fā)者中心】

點(diǎn)擊【對(duì)象存儲(chǔ)】

就可以看到官方文檔了

SpringBoot 上傳圖片
獲取七牛云密鑰
進(jìn)入七牛云控制臺(tái)

點(diǎn)擊【頭像】→【密鑰管理】

創(chuàng)建密鑰,復(fù)制保存,下面要用

導(dǎo)入依賴
<!--qiniu依賴-->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.28</version>
</dependency>
<!--thymeleaf依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
配置 application.yml
spring:
freemarker:
suffix: .html
cache: false
servlet:
multipart:
max-file-size: 20MB
max-request-size: 20MB
qiniu:
accessKey: 申請(qǐng)的 AccessKey,AK
accessSecretKey: 申請(qǐng)的 SecretKey,SK
bucket: 創(chuàng)建的空間名
imageUrl: 域名
編寫 ImageUtils
圖片的上傳工具類
@Component
public class ImageUtils {
@Value("${qiniu.accessKey}")
private String accessKey;
@Value("${qiniu.accessSecretKey}")
private String accessSecretKey;
@Value("${qiniu.bucket}")
private String bucket;
@Value("${qiniu.imageUrl}")
private String url;
/**
* 處理多文件
* @param multipartFiles
* @return
*/
public Map<String, List<String>> uploadImages(MultipartFile[] multipartFiles){
Map<String,List<String>> map = new HashMap<>();
List<String> imageUrls = new ArrayList<>();
for(MultipartFile file : multipartFiles){
imageUrls.add(uploadImageQiniu(file));
}
map.put("imageUrl",imageUrls);
return map;
}
/**
* 上傳圖片到七牛云
* @param multipartFile
* @return
*/
private String uploadImageQiniu(MultipartFile multipartFile){
try {
//1、獲取文件上傳的流
byte[] fileBytes = multipartFile.getBytes();
//2、創(chuàng)建日期目錄分隔
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
String datePath = dateFormat.format(new Date());
//3、獲取文件名
String originalFilename = multipartFile.getOriginalFilename();
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
String filename = datePath+"/"+UUID.randomUUID().toString().replace("-", "")+ suffix;
//4.構(gòu)造一個(gè)帶指定 Region 對(duì)象的配置類
//Region.huabei(根據(jù)自己的對(duì)象空間的地址選
Configuration cfg = new Configuration(Region.huabei());
UploadManager uploadManager = new UploadManager(cfg);
//5.獲取七牛云提供的 token
Auth auth = Auth.create(accessKey, accessSecretKey);
String upToken = auth.uploadToken(bucket);
uploadManager.put(fileBytes,filename,upToken);
return url+filename;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
編寫 Controller
跳轉(zhuǎn)到 upload.html 的接口
@Controller
public class PageController {
@RequestMapping("/upload")
public String to(){
return "upload";
}
}
圖片服務(wù)接口
@RestController
@RequestMapping("/api")
public class ImageController {
@Autowired
private ImageUtils imageUtils;
@PostMapping("/image/upload")
public ResponseResult uploadImage(@RequestParam(value = "file",required = false) MultipartFile[] multipartFile){
if(ObjectUtils.isEmpty(multipartFile)){
return new ResponseResult(HttpResponseStatus.OK.code(), "請(qǐng)選擇圖片");
}
Map<String, List<String>> uploadImagesUrl = imageUtils.uploadImages(multipartFile);
return new ResponseResult(HttpResponseStatus.OK.code(), "上傳成功",uploadImagesUrl);
}
}
注:ResponseResult 為響應(yīng)結(jié)果封裝類,自定義即可。
編寫前端上傳頁(yè)面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:8002/api/image/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit">
</form>
</body>
注:<input type="file" name="file">的 name 值一定要和接口的 @RequestParam("file")一樣
測(cè)試
訪問(wèn) http://localhost:8002/upload

選擇圖片,點(diǎn)擊提交

上傳成功

查看七牛云

到此這篇關(guān)于SpringBoot 整合七牛云上傳圖片的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot 七牛云上傳圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實(shí)現(xiàn)操作系統(tǒng)的短進(jìn)程作業(yè)調(diào)度示例分享
java編寫的實(shí)現(xiàn)了操作系統(tǒng)中的短作業(yè)進(jìn)程,可以實(shí)現(xiàn)幾道作業(yè)同時(shí)作業(yè)調(diào)度2014-02-02
java實(shí)現(xiàn)多線程的兩種方式繼承Thread類和實(shí)現(xiàn)Runnable接口的方法
下面小編就為大家?guī)?lái)一篇java實(shí)現(xiàn)多線程的兩種方式繼承Thread類和實(shí)現(xiàn)Runnable接口的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
Java中使用輾轉(zhuǎn)相除法求最大公約數(shù)
這篇文章主要介紹了Java中使用輾轉(zhuǎn)相除法求最大公約數(shù),本文直接給出代碼實(shí)例,需要的朋友可以參考下2015-05-05
Java數(shù)據(jù)結(jié)構(gòu)之順序表篇
順序表,全名順序存儲(chǔ)結(jié)構(gòu),是線性表的一種。線性表用于存儲(chǔ)邏輯關(guān)系為“一對(duì)一”的數(shù)據(jù),順序表自然也不例外,不僅如此,順序表對(duì)數(shù)據(jù)物理存儲(chǔ)結(jié)構(gòu)也有要求。順序表存儲(chǔ)數(shù)據(jù)時(shí),會(huì)提前申請(qǐng)一整塊足夠大小的物理空間,然后將數(shù)據(jù)依次存儲(chǔ)起來(lái),存儲(chǔ)時(shí)數(shù)據(jù)元素間不留縫隙2022-01-01
解決Maven parent.relativePath帶給我的坑
在Linux環(huán)境下使用Maven進(jìn)行項(xiàng)目打包時(shí),可能會(huì)遇到“當(dāng)前目錄沒(méi)有pom文件”的錯(cuò)誤,需要確認(rèn)在包含pom.xml文件的項(xiàng)目目錄下執(zhí)行Maven命令,另外,如果遇到“parent.relativePath points at wrong local POM”錯(cuò)誤,可能是父模塊依賴問(wèn)題2024-09-09
Java如何利用狀態(tài)模式(state pattern)替代if else
這篇文章主要給大家介紹了關(guān)于Java如何利用狀態(tài)模式(state pattern)替代if else的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

