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

vue如何使用formData傳遞文件類型的數(shù)據(jù)

 更新時間:2023年05月22日 14:52:29   作者:qiansli12138  
這篇文章主要介紹了vue如何使用formData傳遞文件類型的數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

vue使用formData傳遞文件類型的數(shù)據(jù)

1.需求        

傳遞文件類型的數(shù)據(jù)和其他類型的數(shù)據(jù)到后臺。組件使用的是element-ui,就想去里面直接找組件使用,看到了el-upload,就試著用了一下,發(fā)送的是ajax請求,發(fā)現(xiàn)后臺接收不到就開始找問題了。       

2.問題        

看了一下發(fā)送請求攜帶file文件協(xié)議有兩種方法,鏈接(FormData 對象的使用 - Web API 接口參考 | MDN),form表單提交,另外一種是formData(h5里面的新方法),都很方便。因?yàn)槲矣玫氖莢ue,就用formData的格式進(jìn)行傳輸。照著網(wǎng)站開始改吧~~       

3.操作        

  • 3.1 網(wǎng)頁文件
<el-dialog title="導(dǎo)出指定體檢信息" :visible.sync="dialogVisibleexptbyfile" width="50%" center :append-to-body="true">
? ? ? <div class="submit">
? ? ? ? <el-form :model="form" label-width="130px" label-position="left">
? ? ? ? ? <el-form-item label="xxx">
? ? ? ? ? ? <el-select v-model="form.type" placeholder="請選擇類型">
? ? ? ? ? ? ? <el-option label="xxx" value="0"></el-option>
? ? ? ? ? ? ? <el-option label="xxx" value="1"></el-option>
? ? ? ? ? ? </el-select>
? ? ? ? ? </el-form-item>
? ? ? ? ? <el-form-item label="選擇文件">
? ? ? ? ? ? <el-upload class="upload-demo" :limit="1" :on-exceed="exceedfile" :headers="{headers: 'multipart/form-data'}" action="#" :on-change="onChangefile" :before-upload="beforeuploadfile" :auto-upload='false' :file-list="fileList">
? ? ? ? ? ? ? <el-button size="small" type="primary">點(diǎn)擊上傳</el-button>
? ? ? ? ? ? </el-upload>
? ? ? ? ? ? <!-- <input type="file" id="file" ref="file" @change="selectFile"> -->
? ? ? ? ? </el-form-item>
? ? ? ? ? <el-form-item label="xxxxxx">
? ? ? ? ? ? <el-input v-model="form.sheetIndex" style="width: 52%;"></el-input>
? ? ? ? ? </el-form-item>
? ? ? ? ? <el-form-item label="xxx">
? ? ? ? ? ? <el-input v-model="form.startRow" style="width: 52%;"></el-input>
? ? ? ? ? </el-form-item>
? ? ? ? ? <el-form-item label="xxxx">
? ? ? ? ? ? <el-input v-model="form.colNum" style="width: 52%;"></el-input>
? ? ? ? ? </el-form-item>
? ? ? ? </el-form>?
? ? ? </div>
? ? ? <span slot="footer" class="dialog-footer">
? ? ? ? <el-button @click="dialogVisibleexptbyfile = false">取 消</el-button>
? ? ? ? <el-button type="primary" @click="exptbyfile">確 定 導(dǎo) 出</el-button>
? ? ? </span>
</el-dialog>
data () {
? ? return {
? ? ? // 彈框顯示和隱藏
? ? ? dialogVisibleexptbyfile: false,
? ? ? form: {
? ? ? ? type: '',
? ? ? ? sheetIndex: '1',
? ? ? ? colNum: '1',
? ? ? ? startRow: '1'
? ? ? },
? ? ? fileList: [],
? ? ? file: null
? ? };
}
  • 3.2 點(diǎn)擊提交的方法

看了element-ui上的解釋,添加請求頭 :headers="{headers: 'multipart/form-data'}",上傳前的方法,:before-upload="beforeuploadfile",關(guān)閉自動上傳的方法:auto-upload='false'。

?<el-upload class="upload-demo" :limit="1" :on-exceed="exceedfile" :headers="{headers: 'multipart/form-data'}" action="#" :on-change="onChangefile" :before-upload="beforeuploadfile" :auto-upload='false' :file-list="fileList">
? ? ?<el-button size="small" type="primary">點(diǎn)擊上傳</el-button>
?</el-upload>? ? ? ??
  • 3.3 寫方法
import {Utils} from 'xxxxxxxx'
methods: {
? ? ?onChangefile (file) {
? ? ? // file文件改變
? ? ? var testmsg = file.name.substring(file.name.lastIndexOf('.') + 1)
? ? ? //這里我需要上傳表格文件,所以做了限制
? ? ? if (['xls', 'xlsx'].indexOf(testmsg.toLowerCase()) == -1) {
? ? ? ? this.$message.warning('只能上傳.XLS.XLSX格式的文件!')
? ? ? ? this.fileList.shift()
? ? ? ? return
? ? ? }
? ? ? //將選取的文件拿到,這里需要根據(jù)自己業(yè)務(wù)來寫
? ? ? this.fileList[0] = file
? ? ? this.file = file.raw
? ? ? this.filename = file.name
? ? },
? ? // 只允許上傳一個文件
? ? exceedfile () {
? ? ? this.$message.warning('只能上傳一個文件,請刪除后添加!')
? ? },
? ? beforeuploadfile (file) {
? ? ? // console.log("beforeupload", file)
? ? ? this.file = file
? ? },
? ? // 指定下載文件?
? ? exptbyfile () {
? ? ? if (this.fileList.length == 0) {
? ? ? ? this.$message.warning('請上傳文件');
? ? ? ? return
? ? ? }
? ? ? if (this.form.type == "") {
? ? ? ? this.$message.warning('請選擇類型');
? ? ? ? return
? ? ? }?
? ? ? const formData = new FormData() //FormData對象,添加參數(shù)只能通過append('key', value)的形式添加
? ? ? formData.append('file', this.file) //添加文件對象 ,data中設(shè)置的
? ? ? //調(diào)用上傳接口
? ? ? let userinfo = User.getData("userInfo");
? ? ? var params = {
? ? ? ? // 一些參數(shù) XXXXX
? ? ? ? type: this.form.type
? ? ? };
? ? ? // console.log(this.file);
? ? ? ?// 直接掉用方法即可
? ? ? Utils.upload(this.file, "xxxxxxx", params)
? ? },
}? ? ? ?

4.Utils的方法重點(diǎn)是添加processData: false, contentType: false

如果沒有jquery就下一個引入就可以了。

function upload (res, url, params = {}) {
? return new Promise((resolve) => {
? ? var formData = new FormData();?
? ? formData.append("file", res);
? ? for (var i in params) {
? ? ? formData.append(i, params[i]);
? ? }?
? ? $.ajax({
? ? ? url: baseURl + url,
? ? ? type: "POST",
? ? ? data: formData,
? ? ? cache: false, //上傳文件無需緩存?
? ? ? processData: false, //用于對data參數(shù)進(jìn)行序列化處理 這里必須false ~~~~~~重點(diǎn)一定要寫
? ? ? contentType: false, //必須*/ // ~~~~~~重點(diǎn)一定要寫?
? ? ? success: function (data) { ? ? ? ?console.log(data)
? ? ? ? if (data.code == 0) {
? ? ? ? ? resolve(data.data);
? ? ? ? } else {
? ? ? ? ? showTis("上傳錯誤,請聯(lián)系管理員", 'error')
? ? ? ? }
? ? ? },
? ? });
? })
}
export default {
? ? upload
}

這樣后臺就可以接受到數(shù)據(jù)了。

注意:

1.利用Formdata對數(shù)據(jù)進(jìn)行操作。

2.jquery需要添加兩個參數(shù)設(shè)置。

vue使用formData時候傳遞參數(shù)是個空值的情況

關(guān)于在vue中使用axios,傳遞的參數(shù)是formData的情況(上傳文件,圖片,文檔等)

formData用途

1.將from表單元素的name和value結(jié)合,實(shí)現(xiàn)表單數(shù)據(jù)的序列化

2.異步上傳文件

使用formData

1.創(chuàng)建一個空對象

var formData = new FormData();
//大部分情況下,使用formData追加數(shù)據(jù),是通過append() Api來進(jìn)行追加
formData.append(key,value)
//取出追加的值
formData.get(key)
//修改值
formData.set(key,newVale)

2.通過表單對formData進(jìn)行初始化

<form id="myForm">
? ? <p>name:<input type="text" name="name" ?value="xiaolong"></p>
? ??? ?<p>age:<input type="text" name="age" ?value="23"></p>
? ? <p><input type="button" id="btn" value="添加"></p>
</form>

通過表單元素作為參數(shù),對formData進(jìn)行初始化

var btn=document.querySelector("#btn");
btn.onclick=function(){
? ? //獲取表單元素
? ? var form=document.querySelector("#myForm");
? ? //初始化表單
? ? var formdata=new FormData(form);
?? ?//此時可以進(jìn)行一個操作,獲取或者設(shè)置表單的值或者直接提交整個表單
? ? console.log(formdata.get("name"));//xiaolong
}

具體表單的操作API

大部分可以從mdn上面查找到

舉個例子:

獲取表單數(shù)據(jù)或者獲取整個表單對應(yīng)key的數(shù)據(jù)

formData.get('age')//獲取一個key為age的值
formData.getAll('age')//獲取全部key為age的數(shù)據(jù)

在vue里面使用formData的時候,因?yàn)閍xios是進(jìn)行了二次封裝,所以傳遞表達(dá)的時候會傳遞一個空表單過去,這是因?yàn)閍xios在進(jìn)行二次封裝的時候回影響到原來的表單提交或者文件上傳

因此在使用二次封裝axios的時候需要進(jìn)行一個參數(shù)的設(shè)置

this.$axios({
? ? method: "post",
? ? url: `你的請求地址`,
? ? data: formD,//這個是我的fromdata
? ? headers: {
? ? transformRequest: [data => data]//此處是我進(jìn)行設(shè)置的轉(zhuǎn)換數(shù)據(jù)類型
? ? }
})

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue指令?v-bind的使用和注意需要注意的點(diǎn)

    vue指令?v-bind的使用和注意需要注意的點(diǎn)

    這篇文章主要給大家分享了?v-bind的使用和注意需要注意的點(diǎn),下面文章圍繞?v-bind指令的相關(guān)資料展開內(nèi)容且附上詳細(xì)代碼?需要的小伙伴可以參考一下,希望對大家有所幫助
    2021-11-11
  • Vue2遞歸組件實(shí)現(xiàn)樹形菜單

    Vue2遞歸組件實(shí)現(xiàn)樹形菜單

    這篇文章主要為大家詳細(xì)介紹了Vue2遞歸組件實(shí)現(xiàn)樹形菜單的相關(guān)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • vue之帶參數(shù)跳轉(zhuǎn)打開新頁面、新窗口

    vue之帶參數(shù)跳轉(zhuǎn)打開新頁面、新窗口

    這篇文章主要介紹了vue之帶參數(shù)跳轉(zhuǎn)打開新頁面、新窗口方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue中@路徑無法跳轉(zhuǎn)到指定文件的解決

    vue中@路徑無法跳轉(zhuǎn)到指定文件的解決

    這篇文章主要介紹了vue中@路徑無法跳轉(zhuǎn)到指定文件的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 基于vue-seamless-scroll實(shí)現(xiàn)無縫滾動效果

    基于vue-seamless-scroll實(shí)現(xiàn)無縫滾動效果

    這篇文章主要為大家詳細(xì)介紹了基于vue-seamless-scroll實(shí)現(xiàn)無縫滾動效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vue 大文件上傳和斷點(diǎn)續(xù)傳的實(shí)現(xiàn)

    Vue 大文件上傳和斷點(diǎn)續(xù)傳的實(shí)現(xiàn)

    文件上傳在很多項(xiàng)目中都用的到,如果是幾M的很快就傳送完畢,如果是大文件呢?本文就介紹了Vue 大文件上傳和斷點(diǎn)續(xù)傳的實(shí)現(xiàn),感興趣的可以了解一下
    2021-06-06
  • 詳解Vue的列表渲染

    詳解Vue的列表渲染

    這篇文章主要為大家介紹了Vue的列表渲染,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • elementUI組件el-dropdown(踩坑)

    elementUI組件el-dropdown(踩坑)

    本文主要介紹了elementUI組件el-dropdown的一些坑,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 尤雨溪開發(fā)vue?dev?server理解vite原理

    尤雨溪開發(fā)vue?dev?server理解vite原理

    這篇文章主要為大家介紹了尤雨溪開發(fā)的玩具vite,vue-dev-server來理解vite原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 詳解vue項(xiàng)目接入微信JSSDK的坑

    詳解vue項(xiàng)目接入微信JSSDK的坑

    這篇文章主要介紹了詳解vue項(xiàng)目接入微信JSSDK的坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12

最新評論