国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue前端實(shí)現(xiàn)上傳文件的兩種方式

這篇具有很好參考價(jià)值的文章主要介紹了vue前端實(shí)現(xiàn)上傳文件的兩種方式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1.使用form表單的形式

第一種方式就是使用FormData的方式進(jìn)行上傳

html代碼:

<el-form :model="upform" :rules="uprules" style="width:100%;" ref="upform" label-width="100px">
                <el-form-item label="上傳附件:">
                    <el-button type="primary"
                                    @click="upLoad()"
                                    size="mini"
                                    class="form-btn"
                                    >點(diǎn)擊上傳</el-button>
                </el-form-item>
</el-form>

JS代碼:

// 請(qǐng)求-上傳附件
    upLoad() {
        const _this = this;
        //   const fileType = [
        //     "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        //     "application/vnd.ms-excel"
        //   ];
        const fileType = ['xls','xlsx','et']
        const inputFile = document.createElement("input")
        inputFile.type = "file"
        inputFile.style.display = "none"
        document.body.appendChild(inputFile)
        inputFile.click()
        inputFile.addEventListener("change",function() {
            const file = inputFile.files[0];
            var testmsg = file.name.substring(file.name.lastIndexOf('.') + 1)
            if (!fileType.includes(testmsg)) {
              _this.$message.warning("上傳的文件格式只能是,xls,xlsx,et");
              document.body.removeChild(inputFile);
              return false;
            }
             const formData = new FormData();
            formData.append("file", file);
            window.request({
                url:'xxx/xxx',
                data:formData,
                success:(res)=> {
                 if (res.code === 200) {
                     _this.$message.success(res.message || "導(dǎo)入成功");
                     _this.getTableList();
                 }else {
                  _this.$message.success("導(dǎo)入失敗");
                 },
                finally:()=> {
                    document.body.removeChild(inputFile);
                })
       
            })
        },

2.使用element-ui的el-upload的方式進(jìn)行上傳

這里我是根據(jù)需求封裝了一個(gè)組件文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-680601.html

<template>
    <div id="uploadFile">
		<el-form-item :label="uploadParams.label" :label-width="uploadParams.labelWidth" :id="uploadParams.key">
			<el-upload 
			    :data="paramsData"
				:ref="uploadParams.key"
	    	    class="upload-demo"
	    	    :before-upload="beforeUploadFile"
	    	    :action="actionUrl"
	    	    :on-preview="handlePreview"
	    	    :on-success="handleSuccess"
	    	    :on-error="handleError"
	    	    :before-remove="beforeRemove"
	    	    :on-remove="handleRemove"
				:disabled="uploadParams.disabled?uploadParams.disabled: false"
	    	    :limit="uploadParams.limit?uploadParams.limit:1"
	    	    :on-exceed="handleExceed"
	    	    :file-list="uploadParams.fileList">
	    		<el-button size="small" :disabled="uploadParams.disabled?uploadParams.disabled: false" type="primary">點(diǎn)擊上傳</el-button>
	    		<div v-if="uploadParams.showTip?uploadParams.showTip: false" slot="tip" class="el-upload__tip" style="word-break:break-all;"> {{`只能上傳${uploadParams.type}文件,且不超過(guò)${uploadParams.fileSize}M`}} </div>
	    		<div v-if="uploadParams.showTip2?uploadParams.showTip2: false" slot="tip" class="el-upload__tip" style="word-break:break-all;color:red"> {{`只能上傳${uploadParams.limit}個(gè)${uploadParams.type}文件,再次上傳需要?jiǎng)h除之前的模板`}} </div>
	    	</el-upload>
		</el-form-item>
	</div>
</template>
<script>
// ===============上傳文件組件使用=================
// =========嵌套在el-form中調(diào)用組件: <el-from>  <uploadFile :uploadParams="傳遞參數(shù)" @getFileIdReturn="接受上傳文件id數(shù)組回傳"></uploadFile>  </el-form>
// =========  uploadParams中參數(shù)說(shuō)明: label: form的label,labelWidth: form的label-width, key: 指定的組件標(biāo)識(shí),
// ================================    fileList: 存放文件數(shù)組,limit:存放限制上傳數(shù)量,
// ================================	  type: 附件類型(.xxx),多種以英文逗號(hào)分隔, fileSize: 附件大小(M為單位)
// ================================   , showTip: 是否展示提示信息
// 
import fileAPI from "@/api/fileApi";
import Config from "@/settings";
export default {
	name: "uploadFile",
	props: {
		uploadParams: Object,
		paramsData:Object
	},
	data() {
		return {
			fileIdList: [],//存放附件id數(shù)組
			actionUrl: process.env.VUE_APP_BASE_API + "xxxx/xxxx",//文件上傳地址
			removeUrl: 'xxxx/xxx',// 刪除文件地址
		}
	},
	created() {},
	methods: {
		// 文件上傳成功時(shí)的鉤子
    	handleSuccess(res, file, fileList) {
    		this.$message.success("文件上傳成功");
    		let filename = fileList.map(item => {
    			return item.name;
    		});
			this.fileIdList.push(res.data.fid);
			this.$emit("getFileIdReturn", this.fileIdList);//返回文件id數(shù)組
		},
		// 文件上傳失敗時(shí)的鉤子
		handleError() {
			this.$message.error("文件上傳失敗");
		},
		handleExceed(files, fileList) {
    	//上傳超過(guò)限制個(gè)數(shù)
			this.$message.warning(`當(dāng)前限制選擇 ${this.uploadParams.limit} 個(gè)文件,本次選擇了 ${ files.length } 個(gè)文件,
				共選擇了 ${files.length + fileList.length} 個(gè)文件`
    		);
    	},
    	beforeRemove(file, fileList) {
    		if(file.url==undefined){
    			return;
    		}
    		// 移除前鉤子
    		return this.$confirm(`確定移除 ${file.name}?`)
    	},

    	// 上傳文件之前的鉤子, 參數(shù)為上傳的文件,若返回 false 或者返回 Promise 且被 reject,則停止上傳
    	beforeUploadFile(file) {
    		console.log('before upload')
    		// console.log(file)
    		const extension = file.name.substr(file.name.lastIndexOf('.') + 1);
    		console.log('extension', extension)
			const size = file.size / 1024 / 1024;
			let temp = this.uploadParams.type.split(",");
			let typeArr = [];
			temp.forEach(element => {
				typeArr.push(element.substr(element.lastIndexOf('.') + 1));
			});
    		if (!(typeArr.includes(extension)) ) {
    			this.$message.warning(`只能上傳后綴是${this.uploadParams.type}的文件`)
    			return false
    		}
    		if (size > this.uploadParams.fileSize) {
    			this.$message.warning(`文件大小不得超過(guò)${this.uploadParams.fileSize}M`)
    			return false
    		}
    		return extension && size
    	},
    	handleRemove(file, fileList) {
    		// 移除附件時(shí)鉤子
			console.log(file);
    		let id; 
			if(file.url) {
				id = file.url.split("id=")[1];
			}else if(file.response) {
				id = file.response.data.fid;
			}else {
				this.uploadParams.fileList = fileList;
				return
			}
    		window.request({
				url: this.removeUrl,
				data: {
					ids: id
				},
    			success: (res) => {
					if(res.code === 200) {
						this.$message.success("刪除成功!");
						this.uploadParams.fileList = fileList;
						this.fileIdList.forEach((element, index) =>{
							if(element == id) {
								this.fileIdList.splice(index, 1);
							}
						});
            			this.handLoadingShow(false)
						this.$emit("getFileIdReturn", this.fileIdList);//返回文件id數(shù)組
					}
    			}
    		})
    	},
    	handlePreview(file) {
    		//點(diǎn)擊文件列表中已上傳的文件時(shí)的鉤子
			  console.log(file);
			let fileurl;
			if(file.url) {
				fileurl = Config.downUrl + file.url;
			}else {
				fileurl = Config.downUrl + process.env.VUE_APP_BASE_API + "xxx/下載地址" + file.response.data.fid;
			}
			window.location.href = fileurl;
		},
		// 上傳控件的回顯====回顯加載時(shí)使用
    	loadFileList (urlAndFid) {//參數(shù)url加文件
    		let templateList = null;
    		const downloadUrl = process.env.VUE_APP_BASE_API + xxx/xxx";
			this.uploadParams.fileList = [];
			this.fileIdList = [];
    		window.request({
    			url: urlAndFid,
    			success: ({ data }) => {
    				templateList = data;
    				templateList.forEach((element, index) => {
    					const obj = {};
    					obj.name = templateList[index].name;
    					obj.url = downloadUrl + templateList[index].id;
    					obj.id = templateList[index].id;
						this.uploadParams.fileList.push(obj);
						this.fileIdList.push(obj.id);
					});
					this.$emit("getFileIdReturn", this.fileIdList);//返回文件id數(shù)組
    			}
    		});
		},
		loadFileList2 (fileUrl, fileParam) {//url: fileUrl,參數(shù)fileParam
    		let templateList = null;
    		const downloadUrl = process.env.VUE_APP_BASE_API + "xxx/xxx";
			this.uploadParams.fileList = [];
			this.fileIdList = [];
    		window.request({
				url: fileUrl,
				data: fileParam,
    			success: ({ data }) => {
    				templateList = data;
    				templateList.forEach((element, index) => {
    					const obj = {};
    					obj.name = templateList[index].name;
    					obj.url = downloadUrl + templateList[index].id;
    					obj.id = templateList[index].id;
						this.uploadParams.fileList.push(obj);
						this.fileIdList.push(obj.id);
					});
					this.$emit("getFileIdReturn", this.fileIdList);//返回文件id數(shù)組
    			}
    		});
    	},
	}
}
</script>

到了這里,關(guān)于vue前端實(shí)現(xiàn)上傳文件的兩種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 在Leaflet中使用Turf.js生成范圍多邊形的兩種實(shí)現(xiàn)方式

    在Leaflet中使用Turf.js生成范圍多邊形的兩種實(shí)現(xiàn)方式

    目錄 前言 一、場(chǎng)景需求 1、Leaflet.js的不足 2、Turf.js 二、原始數(shù)據(jù)展示 1、點(diǎn)位數(shù)據(jù)展示? 2、定義樣式 3、定位數(shù)據(jù)初始化 三、Turfjs中bbox生成? 1、官網(wǎng)講解 2、軌跡bbox生成 四、Turfjs生成外包多邊形 1、官網(wǎng)例子 2、凸多邊形生成 總結(jié) ????????在一些共享出行的應(yīng)用地圖中

    2024年03月14日
    瀏覽(98)
  • gitee上傳代碼到倉(cāng)庫(kù)的兩種方式

    gitee上傳代碼到倉(cāng)庫(kù)的兩種方式

    代碼上傳到gitee有兩種方式 通過(guò)命令窗口實(shí)現(xiàn) 通過(guò)idea實(shí)現(xiàn) 目錄 一、gitee創(chuàng)建倉(cāng)庫(kù) ?二、通過(guò)命令行上傳代碼到倉(cāng)庫(kù) ?1.打開(kāi)命令行 ?2.配置信息 ?3.初始化本地倉(cāng)庫(kù) ?4.上傳代碼至本地倉(cāng)庫(kù) ?5.添加注釋 ?6.本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)連接 7.強(qiáng)制推送(遠(yuǎn)程倉(cāng)庫(kù)為空可跳過(guò)) 8.本地倉(cāng)

    2024年02月10日
    瀏覽(27)
  • 前端vue elementUI upload上傳組件封裝&多文件上傳&進(jìn)度條,后端servlet request.getPart()接收文件信息

    前端vue elementUI upload上傳組件封裝&多文件上傳&進(jìn)度條,后端servlet request.getPart()接收文件信息

    選中多個(gè)文件上傳 通過(guò) axios請(qǐng)求 onUploadProgress 方法監(jiān)聽(tīng) on-progress on-success 用這兩個(gè)鉤子函數(shù)實(shí)現(xiàn)進(jìn)度條 下面有對(duì)應(yīng)的函數(shù)。 本文是每個(gè)文件一個(gè)請(qǐng)求上傳 也可以用一個(gè)請(qǐng)求上傳多個(gè)文件,需要將文件遍歷添加到 form 表單中,后端用 request.getParts(); 獲取集合,有需要的可以改

    2024年02月11日
    瀏覽(33)
  • js 實(shí)現(xiàn)純前端將數(shù)據(jù)導(dǎo)出excel兩種方式

    將table標(biāo)簽,包括tr、td等對(duì)json數(shù)據(jù)進(jìn)行拼接,將table輸出到表格上實(shí)現(xiàn),這種方法的弊端在于輸出的是偽excel,雖說(shuō)生成xls為后綴的文件,但文件形式上還是html,代碼如下 通過(guò)將json遍歷進(jìn)行字符串拼接,將字符串輸出到csv文件,代碼如下

    2024年02月15日
    瀏覽(27)
  • React下載文件的兩種方式

    React下載文件的兩種方式 - 代碼先鋒網(wǎng) 不知道有用沒(méi)用看著挺整齊? 沒(méi)試過(guò)

    2024年02月12日
    瀏覽(31)
  • vue 生成二維碼的兩種方式

    方式一:qrcode(無(wú) icon 圖標(biāo)) 完整代碼 方式二:vue-qr(有 icon 圖標(biāo)) 官網(wǎng)地址:vue-qr - npm import 引入方式 完整代碼 相關(guān)配置屬性 屬性名 含義 text 編碼內(nèi)容 correctLevel 容錯(cuò)級(jí)別(0 - 3) size 尺寸,長(zhǎng)寬一致, 包含外邊距 margin 二維碼圖像的外邊距,默認(rèn) 20px colorDark 實(shí)點(diǎn)的顏色

    2024年02月15日
    瀏覽(20)
  • Vue中強(qiáng)制更新數(shù)據(jù)的兩種方式

    有時(shí)候我們發(fā)現(xiàn)修改了數(shù)據(jù)源后視圖并沒(méi)有更新,這里提供兩種解決方案 Vue中強(qiáng)制更新數(shù)據(jù)的方法有兩種。 方法一: 使用forceUpdate強(qiáng)制渲染,更新視圖和數(shù)據(jù)。 注:全局強(qiáng)制刷新,性能消耗高。 方法二: this.$set()方法是Vue自帶的可對(duì)數(shù)組和對(duì)象進(jìn)行賦值,并觸發(fā)監(jiān)聽(tīng)的方法

    2024年02月11日
    瀏覽(22)
  • 【Java項(xiàng)目】Vue+ElementUI+Ceph實(shí)現(xiàn)多類型文件上傳功能并實(shí)現(xiàn)文件預(yù)覽功能

    【Java項(xiàng)目】Vue+ElementUI+Ceph實(shí)現(xiàn)多類型文件上傳功能并實(shí)現(xiàn)文件預(yù)覽功能

    先說(shuō)一下我們的需求,我們的需求就是文件上傳,之前的接口是只支持上傳圖片的,之后需求是需要支持上傳pdf,所以我就得換接口,把原先圖片上傳的接口換為后端ceph,但是其實(shí)大致的處理流程都差不多,都是上傳到后端然后得到url地址。 要實(shí)現(xiàn)點(diǎn)擊預(yù)覽文件,那么就需

    2024年02月15日
    瀏覽(25)
  • Vue+ElementUI+Axios實(shí)現(xiàn)攜帶參數(shù)的文件上傳(數(shù)據(jù)校驗(yàn)+進(jìn)度條)

    Vue+ElementUI+Axios實(shí)現(xiàn)攜帶參數(shù)的文件上傳(數(shù)據(jù)校驗(yàn)+進(jìn)度條)

    可以實(shí)現(xiàn)對(duì)上傳文件的類型,大小進(jìn)行數(shù)據(jù)校驗(yàn),以及對(duì)上傳文件所要攜帶的數(shù)據(jù)也進(jìn)行的校驗(yàn),也有文件上傳進(jìn)度的進(jìn)度條。 一、Vue 結(jié)構(gòu)部分 彈窗顯示(文件上傳框+文本框+單選按鈕) 二、JS部分 1、數(shù)據(jù)和數(shù)據(jù)校驗(yàn)部分 2、方法部分 三、后端代碼(Springboot) 1、接口層方

    2024年01月17日
    瀏覽(24)
  • vue3+elementui-plus實(shí)現(xiàn)一個(gè)接口上傳多個(gè)文件

    vue3+elementui-plus實(shí)現(xiàn)一個(gè)接口上傳多個(gè)文件

    首先,先使用element-plus寫(xiě)好上傳組件,變量的定義我在這里就省略了都 然后,綁定的函數(shù)都補(bǔ)充一下 然后,假設(shè)有個(gè)提交按鈕,點(diǎn)擊上傳文件請(qǐng)求接口 既然有編輯,那就應(yīng)該做回顯的邏輯,文件如何回顯到上傳組件上 over 以上主要通過(guò)代碼說(shuō)明,可根據(jù)自己實(shí)際情況改造

    2024年02月13日
    瀏覽(32)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包