欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue使用axios圖片上傳遇到的問題

 更新時(shí)間:2021年05月27日 11:59:48   作者:CRMEB技術(shù)團(tuán)隊(duì)  
后端寫個(gè)上傳圖片的接口可不是很簡(jiǎn)單,只需要讓這個(gè)字段限制為圖片格式,后臺(tái)做個(gè)保存的邏輯就完事了,前端處理還要牽扯到請(qǐng)求頭,數(shù)據(jù)格式的處理等等問題,按照老傳統(tǒng)把圖片按照字符串往接口put發(fā)現(xiàn)返回的全是400錯(cuò)誤,直到我知道了前端的FormData方法!

FormData是個(gè)什么鬼?

經(jīng)過多方搜索調(diào)查了解,這個(gè)神奇的東西是XMLHttpRequest Level 2 新增的一個(gè)對(duì)象,于2008年2月提出,可以利用它來提交表單、模擬表單提交,當(dāng)然最大的優(yōu)勢(shì)就是可以上傳二進(jìn)制文件,可以把所有表單元素的name與value組成一個(gè)queryString,提交到后臺(tái)。

劃重點(diǎn): 可以把所有表單元素的name與value組成一個(gè)queryString,提交到后臺(tái)。這不就是后端所謂的轉(zhuǎn)換數(shù)據(jù)格式,按格式提交唄,前后端分離肯定是異步提交,這個(gè)就可以很好的去解決這個(gè)問題!

使用也很soeasy 只需要把 form 表單作為參數(shù)傳入 FormData 構(gòu)造函數(shù)即可!

在vue和axios的配合下實(shí)戰(zhàn)一波

<!--
    *.vue組件中的上傳組件 
    我這里使用的是buefy的vue組件
-->

<form  method="post" enctype="multipart/form-data">
    <b-field class="file is-primary" :class="{'has-name': !!file}">
        <b-upload v-model="file" class="file-label" @input="getModifyAvatar()">
            <span class="file-cta">
                <b-icon class="file-icon" icon="upload"></b-icon>
                <span class="file-label">Click to upload</span>
            </span>
            <span class="file-name" v-if="file">
                {{ file.name }}
            </span>                    
       </b-upload>
   </b-field>
</form>

<script>
    export default {
        data(){
            return {
                userInfo: '',   // 通過一個(gè)get請(qǐng)求把用戶相關(guān)信息賦值給它
                file: null,
            }
        },
        methods: {
            // 修改頭像
            getModifyAvatar(){
                const formData = new FormData();
                // 構(gòu)造formData數(shù)據(jù)
                formData.append('avatar', this.file)
                // 提交put請(qǐng)求
                getModifyInfo(formData).then(res => {
                    this.userInfo.avatar = res.data.avatar
                })
            },
        }
    }
</script>
// api.js
// 這是我封裝的全局請(qǐng)求方法
import { request } from '../network/request'

// 修改用戶頭像
export const getModifyInfo = (params) => {
    return request({
        url: 've_register/1/',
        method: 'put',
        headers: { 'Content-Type': 'multipart/form-data' },
        data: params
    })
}

看以上代碼,注意發(fā)送請(qǐng)求的時(shí)候一定要設(shè)置請(qǐng)求頭header,如上所示,html表單form中也需要設(shè)置下enctype="multipart/form-data" 否則也是不行的!

通過上面的例子我們目前只用到了FormData的append()方法,網(wǎng)上大部分關(guān)于 FormData 介紹的文章都只提到了append()方法,那么FormData 對(duì)象到底有些什么方法呢?其實(shí)我們console 一下就知道了:

console 之后我們有重大的發(fā)現(xiàn),F(xiàn)ormData 對(duì)象竟然有這么多方法,所以還是自己測(cè)試才能發(fā)現(xiàn)真相,下面就對(duì)這些方法一一進(jìn)行講解:

append()

append()方法用于向 FormData 對(duì)象中添加鍵值對(duì):

fd.append('key1',"value1");
fd.append('key2',"value2");

fd是 FormData 對(duì)象,可以新建的空的對(duì)象,也可以是已經(jīng)包含 form 表單或其他鍵值對(duì)。

set()

設(shè)置對(duì)應(yīng)的鍵 key 對(duì)應(yīng)的值 value(s)

fd.set('key1',"value1");
fd.set('key2',"value2");

append() 方法有點(diǎn)類似,這兩者的區(qū)別就是,當(dāng)指定的 key 值存在時(shí),append()方法是將新增的添加的所有的鍵值對(duì)最后,而set()方法將會(huì)覆蓋前面的設(shè)置的鍵值對(duì)。還是通過實(shí)例來對(duì)比,我們?cè)谇懊娴?form 的基礎(chǔ)上 append() 或 set() 新的鍵值對(duì):

fd.append('name',"will");

有兩個(gè)key為name的鍵值對(duì):

以上就是 append() 和 set() 的區(qū)別。如果設(shè)置的key值不存在,那么兩者的效果是一樣的。

delete()

接收一個(gè)參數(shù),表示你要?jiǎng)h除的 key 值的名字,如果有多個(gè)相同 key 值,會(huì)一并刪除:

fd.append('name','will');
fd.delete('name');

form 中的 name 信息以及通過append() 新增的name 的信息都被刪除了。

get() 和 getAll()

接收一個(gè)參數(shù),表示需要查找的 key 的名稱,返回第一個(gè)該 key 對(duì)應(yīng)的 value 值。如果有多個(gè)相同的 key, 而且要返回所有的這個(gè) key 對(duì)應(yīng)的 value 值。

同樣以上面的 form 表單為基礎(chǔ):

fd.append('name','will');
console.log(fd.get('name')); // sean
fd.append('name','will');
console.log(fd.getAll('name')); // ["sean", "will"]

has()

該方法也接收一個(gè)參數(shù),同樣是 key 的名稱,返回一個(gè)Boolean 值, 用來判斷FormData 對(duì)象是否含有該 key。以上面的form為例:

console.log(fd.has('name')); // true
console.log(fd.has('Name')); // false

其他幾個(gè)就不介紹了,大家感興趣的自己去驗(yàn)證下,寫一遍嗎,敲一遍,比看任何文章要來的實(shí)在喲!

如果以上文章對(duì)您有幫助,請(qǐng)給我們的開源項(xiàng)目點(diǎn)點(diǎn)star: github.crmeb.net/u/xingfu 不勝感激!

以上就是Vue使用axios圖片上傳遇到的問題的詳細(xì)內(nèi)容,更多關(guān)于Vue使用axios圖片上傳的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue3中項(xiàng)目?jī)?yōu)化方法詳解(Web?Worker的使用)

    vue3中項(xiàng)目?jī)?yōu)化方法詳解(Web?Worker的使用)

    最近在做vue3的項(xiàng)目中,遇到了計(jì)算量龐大導(dǎo)致頁面響應(yīng)緩慢的問題,所以下面這篇文章主要給大家介紹了關(guān)于vue3中項(xiàng)目?jī)?yōu)化方法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • Vue實(shí)現(xiàn)商品分類菜單數(shù)量提示功能

    Vue實(shí)現(xiàn)商品分類菜單數(shù)量提示功能

    這篇文章主要介紹了Vue實(shí)戰(zhàn)—商品分類菜單數(shù)量提示功能,本文通過項(xiàng)目實(shí)戰(zhàn)給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • vue多個(gè)元素的樣式選擇器問題

    vue多個(gè)元素的樣式選擇器問題

    這篇文章主要介紹了vue多個(gè)元素的樣式選擇器問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 利用Vue-draggable組件實(shí)現(xiàn)Vue項(xiàng)目中表格內(nèi)容的拖拽排序

    利用Vue-draggable組件實(shí)現(xiàn)Vue項(xiàng)目中表格內(nèi)容的拖拽排序

    這篇文章主要介紹了利用Vue-draggable組件實(shí)現(xiàn)Vue項(xiàng)目中表格內(nèi)容的拖拽排序,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • 解決antd 下拉框 input [defaultValue] 的值的問題

    解決antd 下拉框 input [defaultValue] 的值的問題

    這篇文章主要介紹了解決antd 下拉框 input [defaultValue] 的值的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 詳解Vue返回值動(dòng)態(tài)生成表單及提交數(shù)據(jù)的辦法

    詳解Vue返回值動(dòng)態(tài)生成表單及提交數(shù)據(jù)的辦法

    這篇文章主要為大家介紹了Vue返回值動(dòng)態(tài)生成表單及提交數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • vue二級(jí)路由設(shè)置方法

    vue二級(jí)路由設(shè)置方法

    下面小編就為大家分享一篇vue二級(jí)路由設(shè)置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • Vue中遍歷數(shù)組的新方法實(shí)例詳解

    Vue中遍歷數(shù)組的新方法實(shí)例詳解

    這篇文章主要介紹了Vue中遍歷數(shù)組的新方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 使用Vue CLI創(chuàng)建typescript項(xiàng)目的方法

    使用Vue CLI創(chuàng)建typescript項(xiàng)目的方法

    這篇文章主要介紹了使用Vue CLI創(chuàng)建typescript項(xiàng)目的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • vue實(shí)現(xiàn)錨點(diǎn)跳轉(zhuǎn)scrollIntoView()使用案例

    vue實(shí)現(xiàn)錨點(diǎn)跳轉(zhuǎn)scrollIntoView()使用案例

    這篇文章主要介紹了vue實(shí)現(xiàn)錨點(diǎn)跳轉(zhuǎn)scrollIntoView()使用案例,文中結(jié)合實(shí)例代碼介紹了vue錨點(diǎn)跳轉(zhuǎn)的三種方式(頁內(nèi)跳轉(zhuǎn),跨頁跳轉(zhuǎn),函數(shù)跳轉(zhuǎn)),需要的朋友可以參考下
    2023-07-07

最新評(píng)論