element-plus中,Upload上傳組件的使用 + 后端處理

目錄

一. 案例一:用戶更換個人頭像

1.前端實現

2.后端實現

①引入阿里云oss的依賴

②編寫AliOSSUtils工具類

③編寫controller層

④編寫service層

⑤編寫mapper層

3.效果展示

4.重點理解

結語


一. 案例一:用戶更換個人頭像

1.前端實現

<!-- 預覽登錄用戶頭像的彈窗 -->
<el-dialogv-model="showAvatar"title="頭像預覽"width="30%"append-to-body
><!-- 文件上傳組件 --><el-upload:action="`http://localhost:8848/api/user/${user.id}/updateUserAvatar`"name="userAvatar":show-file-list="false":before-upload="beforeUpload":on-success="handleAvatarSuccess"> <!-- 當前的用戶頭像 --><!-- 如果此時該用戶有頭像,則顯示頭像 --><img v-if="user.avatar != null" :src=user.avatar alt="頭像" title="點擊更換頭像" style="width: 100%;"/><!-- 如果此時該用戶沒有頭像,則顯示自定義span --><span v-else style="display: inline-block;width:480px;height:300px;background-color: #EEEEEE;" title="暫無頭像,點擊上傳頭像"><el-icon style="margin-top: 140px;margin-left:230px"><icon-picture /></el-icon></span></el-upload></el-dialog><script setup>
import {ref} from 'vue'
/* 導入element-plus圖標 */
import { Picture as IconPicture } from '@element-plus/icons-vue'/* 使用pinia的UserStore.js中的數據user */
import userStore from "@/store/UserStore";
const userStoreInfo = userStore();
const user = userStoreInfo.user;//該user中,存儲了當前用戶的全部信息(包含用戶頭像url)。
//alert(JSON.stringify(user))//頭像上傳前的檢查工作(控制哪些類型的文件能上傳)
const beforeUpload = (file) => {// 允許的文件類型const allowedTypes = ['image/png', 'image/jpg', 'image/jpeg'];const isLt2M = file.size / 1024 / 1024 < 2;if (!allowedTypes.includes(file.type)) {/* alert('只能上傳 PNG、JPG 或 JPEG 格式的文件'); *///提示錯誤信息ElMessage.error("只能上傳 PNG、JPG 或 JPEG 格式的圖片~")//阻止上傳return false;}if (!isLt2M) {/* alert('頭像圖片大小不能超過 2MB'); *///提示錯誤信息ElMessage.error("圖片大小不能超過 2MB~")//阻止上傳return false;}//如果滿足上述的所有請求,則允許上傳return true;
};//更改用戶頭像成功后,觸發的函數
const handleAvatarSuccess = (response, uploadFile) => {//alert(JSON.stringify(response));//alert(JSON.stringify(uploadFile));//提示更換頭像成功ElMessage.success(response.message);//將pinia的userStore.js中的當前登錄用戶的頭像改成最新的user.avatar = response.data;//關閉頭像預覽對話框showAvatar.value = false;
}</script>

解讀:

①<el-upload></el-upload>是文件上傳組件,該標簽包著啥并不重要,重要的是一點擊就會讓你選擇本地圖片。

②:action表示該上傳文件的請求對應的后端接口,不受axios的公共前綴影響,因此要寫全后端接口地址。選擇本地圖片后,自動就會發出這個請求,我們無需操作。

③name="userAvatar"表示該文件對象的名稱,后端使用@RequestParam("userAvatar") MultipartFile userAvatar來接收這個文件對象。

④:before-upload表示發送文件上傳請求前,要進行的檢查工作,比如:文件格式、大小是否符合我們的預期,如果不符合直接攔截。

⑤:on-success表示文件上傳成功后,觸發的函數,我們在里面可以來點成功提示等等。

2.后端實現

①引入阿里云oss的依賴


<!--阿里云OSS存儲所需的四個依賴(JDK版本是17的話,對應這四個依賴)-->
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version>
</dependency>
<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>
<dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version>
</dependency>

②編寫AliOSSUtils工具類

/*** 阿里云 OSS 工具類:將前端發送的文件對象傳入該工具類的靜態方法upload中,就會將其存入阿里云oss并返回其url地址。*/
@Component //將該工具類交給spring的IOC容器管理,使用時直接注入即可
public class AliOSSUtils {private String endpoint = "https://oss-cn-beijing.aliyuncs.com";//這是北京,根據自己的來private String accessKeyId = "你自己的ID";private String accessKeySecret = "你自己的Secret";private String bucketName = "你自己的bucket";/*** 實現上傳圖片到OSS*/public String upload(MultipartFile file) throws IOException {//獲取上傳的文件的輸入流InputStream inputStream = file.getInputStream();//避免文件覆蓋(生成唯一的文件名:UUID)String originalFilename = file.getOriginalFilename();//獲取原文件的名稱String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));//上傳文件到 阿里云OSS服務器OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);//生成文件訪問路徑urlString url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;//關閉ossClientossClient.shutdown();//返回該文件的urlreturn url;}}

③編寫controller層

    /*** 更改用戶頭像(文件上傳一般都用Post請求)*/@PostMapping ("/{id}/updateUserAvatar")public Result updateUserAvatar(@PathVariable Integer id, @RequestParam("userAvatar") MultipartFile userAvatar) throws IOException {//System.out.println(id + "+" + userAvatar.getOriginalFilename());String avatarUrl = userService.updateUserAvatar(id, userAvatar);if(avatarUrl !=null){return new Result(200, "更換頭像成功", avatarUrl);}else{return new Result(400, "更換頭像失敗");}}

④編寫service層

service層:

    //更改用戶頭像public String updateUserAvatar(Integer id, MultipartFile userAvatar) throws IOException;

serviceImpl層:

    //注入工具類AliOSSUtils的實例@Autowiredprivate AliOSSUtils aliOSSUtils;//更改用戶頭像public String updateUserAvatar(Integer id, MultipartFile userAvatar) throws IOException {//將前端傳來的圖片,存入阿里云平臺,并獲取該圖片的url地址String avatarUrl = aliOSSUtils.upload(userAvatar);System.out.println("最新的頭像url:" + avatarUrl);//將該用戶的最新頭像的url存入數據庫int i = userMapper.updateUserAvatar(id, avatarUrl);//返回最新頭像的url地址return avatarUrl;}

⑤編寫mapper層

    //根據id,修改用戶頭像@Update("update user set avatar = #{avatarUrl} where id = #{id}")public int updateUserAvatar(Integer id, String avatarUrl);

3.效果展示

4.重點理解

①前端el-upload的name屬性,表示上傳的文件對象的名稱,后端就要用該名稱來接收,如下:

②后端接收文件對象的類型為MultipartFile,這是Spring官方定義的。下面是該類型的幾種方法:

③要理解AliOSSUtils工具類的核心:接收一個文件對象,將其存入阿里云OSS中,并返回其URL地址。

④我們在service層中,將前端傳來的頭像存入阿里云oss并獲得其url后,應該將這個url存入數據庫中,這樣我們就可以查詢數據庫中的url來展示在前端頁面中。

⑤前端發送文件上傳請求的時機:當用戶選擇一個圖片后,就會自動發出請求,我們無需插手。(后期也可以自定義觸發時機)

⑥文件上傳一般都是發送post請求。

⑦el-upload組件的action,代表文件請求對應的后端接口地址,如果需要動態拼接的話,可以加上冒號和飄號`。

結語

以上就是element-plus中,Upload上傳組件的使用 + 后端處理的大致流程。

這只是一個啟蒙案例,后期可以自己精進。

喜歡本篇文章的話,可以留個免費的關注~~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76398.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76398.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76398.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HarmonyOS-ArkUI Rcp模塊類關系梳理

前言 本文重點解決的是&#xff0c;按照官網學習路徑學習Tcp模塊內容時&#xff0c;越看越混亂的問題。仿照官網案例&#xff0c;書寫代碼時&#xff0c;產生的各種疑惑。比如&#xff0c;類與類之間的關系&#xff0c;各種配置信息究竟有多少&#xff0c;為什么越寫越混亂。那…

【云計算物理網絡】數據中心網絡架構設計

云計算的物理基礎&#xff1a;數據中心網絡架構設計 一、技術背景&#xff1a;從“三層架構”到“云原生網絡”二、技術特點&#xff1a;云數據中心網絡的四大支柱三、技術細節&#xff1a;CLOS架構的實現挑戰四、未來方向&#xff1a;從“連接設備”到“感知服務”結語&#x…

window11 通過cmd命令行安裝 oh my zsh 的教程

步驟 1&#xff1a;安裝 WSL 2 和 Ubuntu 1. 以管理員身份打開 CMD wsl --install -d Ubuntu此命令會自動安裝 WSL 2 和 Ubuntu 發行版。 安裝完成后重啟系統。 初始化 Ubuntu 在開始菜單中打開 Ubuntu&#xff0c;設置用戶名和密碼。 步驟 2&#xff1a;在 WSL 的 Ubunt…

gdb 調試命令記錄

啟動調試 gdb ./待調試的程序 #不帶參數 (gdb) run #帶參數 gdb --args ./your_program arg1 arg2 arg3 (gdb) run arg1 arg2 arg3 #圖形化代碼界面 (gdb) layout src基礎調試命令 命令縮寫作用run [args]r運行程序&#xff08;可帶命令行參數&#xff09;break <locatio…

STM32F103低功耗模式深度解析:從理論到應用實踐(上) | 零基礎入門STM32第九十二步

主題內容教學目的/擴展視頻低功耗模式什么是低功耗&#xff0c;模式介紹&#xff0c;切換方法。為電池設備開發做準備。 師從洋桃電子&#xff0c;杜洋老師 &#x1f4d1;文章目錄 一、低功耗模式概述1.1 為什么需要低功耗模式&#xff1f;1.2 基本實現原理 二、低功耗模式的本…

JavaScript instanceof 運算符全解析

JavaScript instanceof 運算符全解析 核心語義: 判斷一個對象(object)是否屬于某個構造函數(constructor)或類的實例,基于原型鏈(prototype chain)實現類型檢測。 一、JavaScript 中的基礎用法 1. 語法結構 object instanceof constructor 返回值:布爾值(true/fal…

電腦基礎之word基礎操作

word是常用的辦公軟件之一&#xff0c;用于文檔編輯&#xff0c;如合同/報告撰寫、論文等?。 一、簡介 word文檔最早由微軟推出&#xff0c;通過Microsoft Office Word軟件創建和編輯。由于涉及版權付費問題&#xff0c;大多數個人使用盜版軟件。后來金山出了WPS office免費軟…

深度解析Python代碼中的廣告信息提取與JSON處理

哈嘍,大家好,我是木頭左! 在當今數字化時代,廣告無處不在,而從廣告中提取關鍵信息并進行處理則成為了一項重要的技能。本文將深入剖析一段Python代碼,該代碼旨在從給定的JSON格式字符串中提取廣告相關信息,并對其進行解析和處理。通過這段代碼,將展示如何運用Python的j…

base64在線解碼工具

我們經常會用到base64編碼&#xff0c;相應的base64解碼成為日常必備&#xff0c;所有我們需要擁有一個base64在線解碼工具 base64在線解碼工具

Linux——進程信號(3)(信號保存與信號捕捉)

進程信號3 信號保存信號相關概念詳解信號集&#xff08;sigset_t&#xff09;及操作函數詳解 信號捕捉信號捕捉的詳細流程解析信號捕捉的核心概念信號捕捉的完整流程&#xff08;以 SIGQUIT 為例&#xff09; 信號保存 信號相關概念詳解 1.核心概念 (1) 信號遞達&#xff08…

批量在 txt 記事本文件的指定位置插入行,如在最末尾位置插入行

我們在網上下載的小說經常可以看到內容中每隔多少行都會現一些網站名稱和聯系方式等廣告信息&#xff0c;這些都是固定或者隨機插入在小說正文中的。那是怎么樣實現在文本文件中指定位置插入這些行的呢&#xff1f;今天就給大家介紹一下如何在 txt 記事本文件或者其它類型的文本…

python的內存管理機制

目錄 內存分配方式自動內存管理內存分配策略 垃圾回收機制引用計數垃圾回收對象創建和引用關系引用計數的狀態刪除變量 標記 - 清除垃圾回收 內存分配的區域劃分棧內存堆內存 內存管理的優化內存池技術對象共享 Python 的內存管理機制是其運行效率和安全性的重要保障&#xff0…

火山引擎coze用戶市場

火山引擎 **Coze**&#xff08;扣子&#xff09;的用戶市場主要集中在 **需要快速構建和部署智能對話應用的企業及開發者群體**&#xff0c;覆蓋多個行業與場景。以下是具體分析&#xff1a; --- ### **一、核心用戶群體** 1. **企業用戶** - **互聯網/科技公司**&#…

Java 責任鏈模式 詳解

責任鏈模式詳解 一、責任鏈模式概述 責任鏈模式(Chain of Responsibility Pattern)是一種行為型設計模式&#xff0c;它允許你將請求沿著處理鏈傳遞&#xff0c;直到有一個處理者能夠處理它為止。這種模式解耦了請求的發送者和接收者&#xff0c;使多個對象都有機會處理請求。…

【C++初階】--- string類

1.STL簡介 STL(standard template libaray-標準模板庫)&#xff1a;是C標準庫的重要組成部分&#xff0c;不僅是一個可復用的組件庫&#xff0c;而且是一個包羅數據結構與算法的軟件框架。 2.string類 2.1什么是string類 std::string 類是 C 標準庫中用于處理和操作字符串…

Ubuntu 20.04 中 Git 的安裝、配置和基本操作指南

本文為經驗 所談 使用版本為ubuntu20.04 1 ubuntu的git初始化 1.安裝git sudo apt-get install git 可通過git --version 命令查看&#xff0c;正常輸出git版本號即安裝成功。 2.配置用戶名和郵箱名 git config --global user.name "Your Name" git config --globa…

conda 激活環境vscode的Bash窗口

多份conda環境注意事項&#xff0c;當時安裝了兩個conda環境&#xff0c;miniconda和conda&#xff0c;導致環境總是沖突矛盾。初始化時需要更加注意。 $ C:/Users/a_hal/miniconda3/Scripts/conda.exe init bash能夠顯示用哪里的conda環境命令執行。 然后直接conda activate…

Mac下小智AI本地環境部署

可以進行聊天、編寫程序、播放歌曲等等的小智語音聊天小助手&#xff0c;在Mac環境下修改源代碼&#xff0c;值得擁有。本篇內容主要講解Mac下環境的搭建&#xff0c;WebSocket的修改。注&#xff1a;環境python3.12.0、ESP-IDF5.4.0、開發板ESP32S3。 目錄 1.Git安裝2.Python…

Linux安裝Cmake (Centos 7.9)

cmake安裝 這個雖然已經更新到了4.0.0版本了&#xff0c;但是我們要用3.5版本的&#xff0c;因為這個比較穩定 官方地址&#xff1a;https://github.com/Kitware/CMake/releases/tag/v3.5.0&#xff0c;選擇那個cmake-3.5.0-Linux-x86_64.tar.gz下載&#xff0c; 首先解壓文…

基于 SpringBoot 的舊物置換網站

收藏關注不迷路&#xff01;&#xff01; &#x1f31f;文末獲取源碼數據庫&#x1f31f; 感興趣的可以先收藏起來&#xff0c;還有大家在畢設選題&#xff08;免費咨詢指導選題&#xff09;&#xff0c;項目以及論文編寫等相關問題都可以給我留言咨詢&#xff0c;希望幫助更多…