springboot+vue實(shí)現(xiàn)七牛云頭像的上傳
做了個(gè)前后端分離的項(xiàng)目,對(duì)于用戶的頭像修改一直不是很滿意,
于是用了Vant4的組件庫改成了文件點(diǎn)擊上傳,先是打算存到本地,了解到七牛云的方便后(主要是免費(fèi)),決定改成七牛云存儲(chǔ)圖片,記錄一下操作,方便查看復(fù)習(xí)
一、七牛云
七牛云簡(jiǎn)介
七牛云是國內(nèi)領(lǐng)先的企業(yè)級(jí)公有云服務(wù)商,致力于打造以數(shù)據(jù)為核心的場(chǎng)景化PaaS服務(wù)。圍繞富媒體場(chǎng)景,七牛先后推出了對(duì)象存儲(chǔ),融合CDN加速,數(shù)據(jù)通用處理,內(nèi)容反垃圾服務(wù),以及直播云服務(wù)等。
七牛云對(duì)象存儲(chǔ) Kodo 是七牛云提供的高可靠、強(qiáng)安全、低成本、可擴(kuò)展的存儲(chǔ)服務(wù)。您可通過控制臺(tái)、API、SDK 等方式簡(jiǎn)單快速地接入七牛存儲(chǔ)服務(wù),實(shí)現(xiàn)海量數(shù)據(jù)的存儲(chǔ)和管理。通過 Kodo 可以進(jìn)行文件的上傳、下載和管理。
總的來說:七牛云是為開發(fā)服務(wù)的云存儲(chǔ)環(huán)境,可以在七牛云上托管靜態(tài)文件資源,并且進(jìn)行下載,還有很多七牛云的sdk。具體有關(guān)七牛云的介紹可以參考開發(fā)文檔:https://developer.qiniu.com/kodo
七牛云使用
首先去官網(wǎng)注冊(cè) 七牛云
登錄注冊(cè)就不再說了,注冊(cè)完畢之后,點(diǎn)擊個(gè)人中心,進(jìn)行身份認(rèn)證
當(dāng)身份認(rèn)證完成之后,點(diǎn)左上角創(chuàng)建存儲(chǔ)空間,點(diǎn)這個(gè)對(duì)象存儲(chǔ)Kodo
點(diǎn)擊空間管理,新建存儲(chǔ)空間,
讓你輸入空間名稱還有存儲(chǔ)區(qū)域以及訪問控制,按照要求填寫即可
現(xiàn)在就有了一個(gè)個(gè)人倉庫了,系統(tǒng)會(huì)給我們分配一個(gè)測(cè)試域名,不過這個(gè)域名只有30天有效期,我們可以先用這個(gè)域名進(jìn)行測(cè)試,后面來綁定自己的域名
點(diǎn)擊空間管理,進(jìn)入域名管理,即可以添加綁定域名
記住域名一定要是備案域名
二、前端vue配置
這里本人用的是vant4組件
<template> <van-uploader v-model="fileList" :before-read="beforeRead" :after-read="afterRead"/> </template> <script setup lang="ts"> const fileList = ref([ {url: editUser.value.currentValue, isImage: true}, // Uploader 根據(jù)文件后綴來判斷是否為圖片文件 // 如果圖片 URL 中不包含類型信息,可以添加 isImage 標(biāo)記來聲明 ]); console.log(fileList) const beforeRead = (file: any) => { console.log(file+'jpg') if (file.type !== 'image/jpeg') { Toast('請(qǐng)上傳 jpg 格式圖片'); return false; } return true; }; const afterRead = (file: any) => { // 返回圖片信息 console.log(file); const ImgUploadFile = async (params: any) => { // 要把數(shù)據(jù)變成file格式 const formData = new FormData(); // 下面有備注 formData.append('file', params); console.log(formData) return await myAxios.post('/upload/img', formData, { headers: { // 注意修改請(qǐng)求頭file格式 'Content-Type': 'multipart/form-data', }, }); }; ImgUploadFile(file.file) editUser.value.currentValue = "你自己的域名/"+ file.file.name; } </script>
三、后端springboot配置
.在pom.xml添加七牛云依賴
<!--七牛云上傳--> <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>7.2.11</version> </dependency> <!-- 七牛云依賴Gson --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.6</version> </dependency>
controller層
@Controller @RequestMapping("upload") public class uploadimg { @PostMapping("/img") @ResponseBody public void up1img(@RequestParam(value = "file", required = false) MultipartFile file) throws IOException { if (file.isEmpty()) { return; } String fileName = file.getOriginalFilename(); InputStream inputStream = file.getInputStream(); QiniuOssUtils utils = new QiniuOssUtils(); String upload = utils.upload(inputStream, fileName); System.out.println(upload); } }
工具類方法,記得換成你自己的AK和CK以及域名
七牛云的配置信息都可以在個(gè)人中心拿到,其中AK和SK:點(diǎn)擊密鑰管理
import com.google.gson.Gson; import com.qiniu.common.QiniuException; import com.qiniu.common.Zone; import com.qiniu.http.Response; import com.qiniu.storage.BucketManager; import com.qiniu.storage.Configuration; import com.qiniu.storage.UploadManager; import com.qiniu.storage.model.DefaultPutRet; import com.qiniu.util.Auth; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; /** * 七牛OSS管理工具 */ public class QiniuOssUtils { /** * 存儲(chǔ)空間名 */ private static final String BUCKET = "空間名"; /** * accessKey和secretKey */ private static final String ACCESS_KEY = "AK"; private static final String SECRET_KEY = "CK"; /** * 外網(wǎng)訪問地址(內(nèi)置域名有效期只有30天) */ private static final String BASE_URL = "域名+/"; /** * 上傳管理器 */ private UploadManager upload; /** * 桶管理器(存儲(chǔ)空間管理器) */ private BucketManager bucket; public QiniuOssUtils() { //創(chuàng)建配置對(duì)象 Configuration cfg = new Configuration(Zone.zone2()); //創(chuàng)建上傳管理器 upload = new UploadManager(cfg); //創(chuàng)建存儲(chǔ)空間管理器 bucket = new BucketManager(getAuth(), cfg); } /** * 返回認(rèn)證器(包含的訪問密鑰) * * @return */ private Auth getAuth() { return Auth.create(ACCESS_KEY, SECRET_KEY); } /** * 獲取令牌對(duì)象(服務(wù)器返回的授權(quán)信息) * * @return */ private String getToken() { return getAuth().uploadToken(BUCKET); } /** * 文件上傳 * * @param file * @return */ public String upload(File file, String key) { try { return upload(new FileInputStream(file), key); } catch (FileNotFoundException | QiniuException e) { e.printStackTrace(); } return null; } /** * 上傳文件 * * @param is * @param key * @return * @throws QiniuException */ public String upload(InputStream is, String key) throws QiniuException { //上傳流 Response response = upload.put(is, key, getToken(), null, null); //解析返回結(jié)果 DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); //將文件的訪問地址返回 return BASE_URL + putRet.key; } /** * 刪除文件 * * @param key */ public void delete(String key) { try { bucket.delete(BUCKET, key); } catch (QiniuException e) { e.printStackTrace(); } } }
查看的話,可以在代碼中修改,將圖片路徑存儲(chǔ)到數(shù)據(jù)庫中,
查看時(shí)到數(shù)據(jù)庫中將路徑查詢出來,返給前端,前端拿到鏈接訪問即可。
最終效果是這樣
我們也可以來看一下七牛云后臺(tái)管理的圖片信息
到此這篇關(guān)于springboot+vue實(shí)現(xiàn)七牛云頭像的上傳的文章就介紹到這了,更多相關(guān)springboot vue七牛云頭像上傳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot整合Druid數(shù)據(jù)源的方法實(shí)現(xiàn)
Druid是阿里開發(fā)的一款開源的數(shù)據(jù)源,被很多人認(rèn)為是Java語言中最好的數(shù)據(jù)庫連接池,本文主要介紹了SpringBoot整合Druid數(shù)據(jù)源的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06MyBatis 實(shí)現(xiàn)批量插入和刪除中雙層循環(huán)的寫法案例
這篇文章主要介紹了MyBatis 實(shí)現(xiàn)批量插入和刪除中雙層循環(huán)的寫法案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01SpringBoot 在IDEA中實(shí)現(xiàn)熱部署步驟詳解(實(shí)用版)
這篇文章主要介紹了SpringBoot 在IDEA中實(shí)現(xiàn)熱部署步驟詳解(實(shí)用版),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12Mybatis 傳輸List的實(shí)現(xiàn)代碼
本文通過實(shí)例代碼給大家介紹了mybatis傳輸list的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-09-09Springboot?手動(dòng)分頁查詢分批批量插入數(shù)據(jù)的實(shí)現(xiàn)流程
這篇文章主要介紹了Springboot?手動(dòng)分頁查詢分批批量插入數(shù)據(jù)的實(shí)現(xiàn)流程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07Mybatis-Plus實(shí)現(xiàn)自動(dòng)生成代碼的操作步驟
AutoGenerator 是 MyBatis-Plus 的代碼生成器,通過 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個(gè)模塊的代碼,極大的提升了開發(fā)效率,本文將給大家介紹Mybatis-Plus實(shí)現(xiàn)自動(dòng)生成代碼的操作步驟2023-10-10帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之遞歸
這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之遞歸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01基于Java?Agent的premain方式實(shí)現(xiàn)方法耗時(shí)監(jiān)控問題
javaagent是在JDK5之后提供的新特性,也可以叫java代理,這篇文章主要介紹了基于Java?Agent的premain方式實(shí)現(xiàn)方法耗時(shí)監(jiān)控問題,需要的朋友可以參考下2022-10-10