SpringBoot整合七牛云上傳圖片的示例代碼
在個人的一個項目中有一些需求需要用到圖片文件上傳,那么相比于阿里云我選擇了七牛云,主要還是想白嫖,哈哈。
七牛云每個月有一定的免費額度,對于目前我的項目來說還是足夠用的
阿里云OSS個人理解是上傳不收費,但是訪問就會產(chǎn)生費用
開通七牛云
注冊登錄七牛云:https://sso.qiniu.com/
進入管理控制臺
選擇資源管理→新建存儲空間
進入空間管理之后,點擊【+新建空間】
右側(cè)設(shè)置【空間名稱】,【區(qū)域】,【訪問控制】
空間創(chuàng)建完之后,七牛云會給一個具有一個月時限的測試域名,也可以綁定備案的域名。
到這里,七牛云的對象存儲空間就設(shè)置成功了。
七牛云開發(fā)文檔
官方文檔地址:https://developer.qiniu.com/kodo/1239/java
點擊【文檔】→【開發(fā)者中心】
點擊【對象存儲】
就可以看到官方文檔了
SpringBoot 上傳圖片
獲取七牛云密鑰
進入七牛云控制臺
點擊【頭像】→【密鑰管理】
創(chuàng)建密鑰,復制保存,下面要用
導入依賴
<!--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: 申請的 AccessKey,AK accessSecretKey: 申請的 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)造一個帶指定 Region 對象的配置類 //Region.huabei(根據(jù)自己的對象空間的地址選 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(), "請選擇圖片"); } Map<String, List<String>> uploadImagesUrl = imageUtils.uploadImages(multipartFile); return new ResponseResult(HttpResponseStatus.OK.code(), "上傳成功",uploadImagesUrl); } }
注:ResponseResult 為響應(yīng)結(jié)果封裝類,自定義即可。
編寫前端上傳頁面
<!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")
一樣
測試
訪問 http://localhost:8002/upload
選擇圖片,點擊提交
上傳成功
查看七牛云
到此這篇關(guān)于SpringBoot 整合七牛云上傳圖片的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot 七牛云上傳圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實現(xiàn)操作系統(tǒng)的短進程作業(yè)調(diào)度示例分享
java編寫的實現(xiàn)了操作系統(tǒng)中的短作業(yè)進程,可以實現(xiàn)幾道作業(yè)同時作業(yè)調(diào)度2014-02-02java實現(xiàn)多線程的兩種方式繼承Thread類和實現(xiàn)Runnable接口的方法
下面小編就為大家?guī)硪黄猨ava實現(xiàn)多線程的兩種方式繼承Thread類和實現(xiàn)Runnable接口的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09Java中使用輾轉(zhuǎn)相除法求最大公約數(shù)
這篇文章主要介紹了Java中使用輾轉(zhuǎn)相除法求最大公約數(shù),本文直接給出代碼實例,需要的朋友可以參考下2015-05-05Java數(shù)據(jù)結(jié)構(gòu)之順序表篇
順序表,全名順序存儲結(jié)構(gòu),是線性表的一種。線性表用于存儲邏輯關(guān)系為“一對一”的數(shù)據(jù),順序表自然也不例外,不僅如此,順序表對數(shù)據(jù)物理存儲結(jié)構(gòu)也有要求。順序表存儲數(shù)據(jù)時,會提前申請一整塊足夠大小的物理空間,然后將數(shù)據(jù)依次存儲起來,存儲時數(shù)據(jù)元素間不留縫隙2022-01-01解決Maven parent.relativePath帶給我的坑
在Linux環(huán)境下使用Maven進行項目打包時,可能會遇到“當前目錄沒有pom文件”的錯誤,需要確認在包含pom.xml文件的項目目錄下執(zhí)行Maven命令,另外,如果遇到“parent.relativePath points at wrong local POM”錯誤,可能是父模塊依賴問題2024-09-09Java如何利用狀態(tài)模式(state pattern)替代if else
這篇文章主要給大家介紹了關(guān)于Java如何利用狀態(tài)模式(state pattern)替代if else的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11