最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue+FormData+axios實現(xiàn)圖片上傳功能的項目實戰(zhàn)

 更新時間:2023年06月21日 08:34:52   作者:經(jīng)海路大白狗  
本文主要介紹了Vue+FormData+axios實現(xiàn)圖片上傳功能的項目實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、DOM內容的添加

在Vue中,說DOM的添加總感覺有點別扭,因為我們所書寫的HTML DOM部分,是放置在template模板里的,而這里的模板內容離真實的DOM其實還有很多步驟。不過這里先略過這些,我們就以DOM為例。

1. 上傳按鈕和圖片預備容器

在真實的項目中,用戶點擊的必定不是那個比較丑陋的input file組件,而是提供一個對用戶非常友好的上傳按鈕。然后再放置一個DIV元素,用來預備存放上傳成功后的圖片,以達到預覽的效果。

本小節(jié)暫時不用真實的業(yè)務組件來開發(fā),先做一個小例子,一旦做成了,下一節(jié)圖書信息上傳就可以直接使用了。打開 /views/HelloWorld.vue 文件,書寫以下DOM代碼:

<el-button @click="uploadImage">上傳圖片</el-button>
    <p>展示圖片:<p>
    <div style="width: 300px;height: 300px;border: 1px solid #CCC;">
      <img :src="upImage" v-if="upImage" style="width: 300px;height: 300px;" />
    </div>
    <input ref="imgFile" type="file" 
      name="file" accept="image/png,image/gif,image/jpeg,image/jpg" 
      @change="go2UploadImg($event)" style="display: none;">

2. DOM內容說明 

  • el-button做為用戶點擊的“上傳按鈕”;
  • DIV元素用來預備預覽存放上傳后的圖片;
  • img元素,我們用v-if=“upImage”做為顯示判斷,如果不做判斷,在上傳圖片前會是一個叉叉的錯誤圖片;
  • input type="file"組件是HTML原生的Input組件,也是圖片上傳中重要的一個環(huán)節(jié),用來選取本機系統(tǒng)中的圖片
  • 一般用戶不直接點擊input type="file"的組件,而是采用點擊正常按鈕,點擊的同時主動觸發(fā)上傳組件,而后通過change事件做上傳實現(xiàn);
  • accept屬性表示可上傳圖片的類型,本例中可選擇系統(tǒng)中png gif jpeg jpg這4類圖片

3. 數(shù)據(jù)依賴的添加

新學習Vue的小伙伴可能還不太習慣,什么data數(shù)據(jù),什么數(shù)據(jù)依賴,什么雙向綁定,就不能說人話嗎?的確如此,越接觸破詞越多,總是有那么多人喜歡造詞。

好吧,說遠了,我們上面說到img元素在還沒有賦值的時候,會是叉叉,很不友好。所以添加了v-if="upImage"的判斷。這里的upImage就是依賴于數(shù)據(jù)渲染的變量,而說到數(shù)據(jù)依賴,要想到Vue組件中下面這處代碼,data函數(shù)中的數(shù)據(jù)就是所謂的數(shù)據(jù)依賴

二、上傳事件說明

1. 上傳事件準備

圖片上傳是一種行為,是一系列事件。而我們上面說,要通過點擊“上傳圖片”按鈕,去觸發(fā)type="file"的原生組件,而原生組件被觸發(fā)上傳的重點在于change事件,這里注意,click事件只是去觸發(fā)選擇,說白了就是通過代碼悄悄的觸碰一下上傳組件,代碼如下

methods: {
    uploadImage() {
      this.$refs.imgFile.click();
    },
    go2UploadImg(e) {
      const file = e.target.files[0];
      const formData = new FormData();
      formData.append("file", file);
      uploadFile(formData).then((res) => {
        this.upImage = res.data;
      }).catch(() => {
        console.log('圖片上傳異常,請聯(lián)系技術人員');
      })
    }
  }

2. 上傳事件說明 

uploadImage方法中,我們采用refs的方式獲取type="file"組件,并且使用click的方式,觸發(fā)組件的選擇功能;

而被處罰的change事件go2UploadImg,才是重點所在。我們通過new FormData對象,在對象中將圖片文件信息存進去,做為入?yún)ⅲ{用接口進行上傳。

三、axios上傳零件

因為之前的章節(jié),把axios功能解耦封裝的過程已經(jīng)說過了,而且項目搭建之初做一個很好的整理,對項目實戰(zhàn)過程也是事半功倍的。

1. 引入 uploadFile 上傳方法

/views/HelloWorld.vue 文件中,引入uploadFile方法,用于業(yè)務組件中上傳調用,代碼如下:

import { uploadFile } from '@/api/uploadImage.js';

2. 添加 uploadFile 實現(xiàn)代碼 

新建 /src/api/uploadImage.js文件,這里是 uploadFile 方法的具體實現(xiàn),而剛才HelloWorld.vue中是業(yè)務組件的引用,這里要區(qū)分開,代碼如下:

import request from '../utils/httpRequire.js';
import { URLS } from '../config/httpUrl.js';
// 上傳圖片
export function uploadFile(data) {
    return request({
        url: URLS.upFile,
        method: 'post',
        data,
    });
}

 api目錄下的文件,之前的章節(jié)說過,會做一些ajax上傳的具體實現(xiàn),而需要注意的幾點就是:

  • request 的引入,這里因為httpRequire.js已經(jīng)實現(xiàn)完成了,保證每次新建實現(xiàn)文件,引入就好了
  • URLS,是對請求url做了一個統(tǒng)一的管理,每個ajax請求會不一樣;
  • 整理過后的data入?yún)?shù)據(jù)也很方便,直接在業(yè)務組件中整理好json數(shù)據(jù)就可以了

3. 添加url管理 

打開 /src/config/httpUrl.js 文件,添加新的上傳接口url即可,代碼如下:

import { HPPT_IP } from "./httpIp";
export const URLS = {
  testPost: HPPT_IP + '/admin/book',    // post測試路徑
  testGet: HPPT_IP + '/admin/book',     // post測試路徑
  login: HPPT_IP + '/auth/login',       // 登錄接口
  logout: HPPT_IP + '/auth/logout',     // 登出接口
  upFile: HPPT_IP + '/upload/image',     // 上傳圖片
}

四、實現(xiàn)效果展示

1. 上傳前

上傳前,是一個上傳按鈕,一個預備DIV元素,如圖:

2. 上傳請求

上傳過程中headers有個關鍵的參數(shù)tgCsrfToken,用于判斷當前用戶是否處于登錄狀態(tài)

  3. 上傳后預覽

上傳后,服務端已經(jīng)將圖片存儲起來,并且把存儲的服務器圖片鏈接返回來了,剛才我們在代碼中用了 this.upImage = res.data;  應該還記得吧。到這里,我們這一節(jié)的內容就算成功結束了。

五、本小節(jié)的周邊

依照慣例,我們在文章末尾提出一些關于本文的思考題,這些題和文章內容一樣重要。而且這些思考題很有意思,每隔一段時間再回過頭來看得時候,總會有新的想法,新的解釋,提醒自己再不斷地前行著

  • 如果讓你設計一個圖片上傳組件,封裝起來,你準備如何做?
  • 你覺得把一個圖片存到數(shù)據(jù)庫里,應該怎么存?
  • FormData有什么用?請說出自己的理解
  • 如果不用axios上傳圖片,用jQuery來做呢,怎么做?
  • 如何實現(xiàn)多圖片上傳

到此這篇關于Vue+FormData+axios實現(xiàn)圖片上傳功能的項目實戰(zhàn)的文章就介紹到這了,更多相關Vue FormData axios圖片上傳內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue中的?ref,props,mixin屬性

    Vue中的?ref,props,mixin屬性

    這篇文章主要介紹了Vue中的ref,props,mixin屬性,文章圍繞主題ref,props,mixin展開詳細內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Vue.js實現(xiàn)無限加載與分頁功能開發(fā)

    Vue.js實現(xiàn)無限加載與分頁功能開發(fā)

    這篇文章主要為大家詳細介紹了Vue.js實現(xiàn)無限加載與分頁功能開發(fā)實踐,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • vue實現(xiàn)一個移動端屏蔽滑動的遮罩層實例

    vue實現(xiàn)一個移動端屏蔽滑動的遮罩層實例

    本篇文章主要介紹了vue實現(xiàn)一個移動端屏蔽滑動的遮罩層實例,具有一定的參考價值,有興趣的可以了解一下
    2017-06-06
  • 基于vue實現(xiàn)簡易打地鼠游戲

    基于vue實現(xiàn)簡易打地鼠游戲

    這篇文章主要為大家詳細介紹了基于vue實現(xiàn)簡易打地鼠游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Vue3如何在setup中獲取元素引用(ref)

    Vue3如何在setup中獲取元素引用(ref)

    這篇文章主要介紹了Vue3如何在setup中獲取元素引用(ref)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • vue中下載文件的方法示例詳解

    vue中下載文件的方法示例詳解

    這篇文章主要介紹了vue中下載文件的方法,通過實例代碼講解了下載后端返回文件和下載本地文件,本文結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • vue+element實現(xiàn)表單校驗功能

    vue+element實現(xiàn)表單校驗功能

    這篇文章主要介紹了vue+element表單校驗功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • Vue開發(fā)中常見的套路和技巧總結

    Vue開發(fā)中常見的套路和技巧總結

    這篇文章主要給大家介紹了關于Vue開發(fā)中常見的套路和技巧的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 通過實例解析chrome如何在mac環(huán)境中安裝vue-devtools插件

    通過實例解析chrome如何在mac環(huán)境中安裝vue-devtools插件

    這篇文章主要介紹了通過實例解析chrome如何在mac環(huán)境中安裝vue-devtools插件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • vue和H5 draggable實現(xiàn)拖拽并替換效果

    vue和H5 draggable實現(xiàn)拖拽并替換效果

    這篇文章主要為大家詳細介紹了vue和H5 draggable實現(xiàn)拖拽并替換效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評論

潼关县| 北京市| 台北县| 定结县| 平定县| 临清市| 红河县| 广西| 苏州市| 远安县| 米林县| 屏边| 汤原县| 柘城县| 枣阳市| 辉县市| 兖州市| 古丈县| 自治县| 新化县| 伊春市| 九台市| 丰镇市| 长治县| 新泰市| 新晃| 招远市| 吴江市| 南溪县| 井冈山市| 喜德县| 洪江市| 乐清市| 安国市| 昭觉县| 巩义市| 得荣县| 阿勒泰市| 姚安县| 濉溪县| 马公市|