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

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里面的新方法),都很方便。因為我用的是vue,就用formData的格式進行傳輸。照著網(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">點擊上傳</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 點擊提交的方法

看了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">點擊上傳</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的方法重點是添加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ù)進行序列化處理 這里必須false ~~~~~~重點一定要寫
? ? ? contentType: false, //必須*/ // ~~~~~~重點一定要寫?
? ? ? 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ù)進行操作。

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

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

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

formData用途

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

2.異步上傳文件

使用formData

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

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

2.通過表單對formData進行初始化

<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進行初始化

var btn=document.querySelector("#btn");
btn.onclick=function(){
? ? //獲取表單元素
? ? var form=document.querySelector("#myForm");
? ? //初始化表單
? ? var formdata=new FormData(form);
?? ?//此時可以進行一個操作,獲取或者設(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的時候,因為axios是進行了二次封裝,所以傳遞表達的時候會傳遞一個空表單過去,這是因為axios在進行二次封裝的時候回影響到原來的表單提交或者文件上傳

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

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

總結(jié)

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

相關(guān)文章

最新評論

株洲县| 珲春市| 河间市| 汨罗市| 新闻| 图木舒克市| 云龙县| 保山市| 金沙县| 凌云县| 太原市| 乃东县| 修武县| 霍城县| 章丘市| 昭苏县| 丹凤县| 阿鲁科尔沁旗| 襄城县| 镇平县| 天津市| 上杭县| 青海省| 仪陇县| 许昌市| 宁乡县| 大安市| 陕西省| 婺源县| 广水市| 伊金霍洛旗| 体育| 武乡县| 本溪| 永济市| 新巴尔虎右旗| 朝阳区| 博兴县| 云安县| 叙永县| 荆门市|