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

Vue項(xiàng)目el-upload?上傳文件及回顯照片和下載文件功能實(shí)現(xiàn)

 更新時(shí)間:2023年12月21日 11:55:33   作者:Aohan-z  
本次需求是上傳多種固定格式的文件,且回顯的時(shí)候,圖片可以正常顯示,文件可以進(jìn)行下載,主要采用element的el-upload組件實(shí)現(xiàn),對(duì)Vue項(xiàng)目el-upload?上傳文件及回顯照片和下載文件功能實(shí)現(xiàn)感興趣的朋友跟隨小編一起看看吧

本次需求是上傳多種固定格式的文件,且回顯的時(shí)候,圖片可以正常顯示,文件可以進(jìn)行下載
主要采用element的el-upload組件實(shí)現(xiàn)

1、文件上傳

先看下,上傳文件效果圖
點(diǎn)擊上傳將文件放到網(wǎng)頁,還有一個(gè)點(diǎn)擊確定的按鈕再上傳文件到服務(wù)器

在這里插入圖片描述

html

<el-upload
   ref="upload"
   accept=".png,.jpg,.jpeg,.doc,.docx,.txt,.xls,.xlsx"
   action="#"
   multiple
   :limit="5"
   :headers="headers"
   :auto-upload="false"
   :file-list="fileList"
   :on-change="handleChange"
   :on-remove="removeFile"
   :on-exceed="limitCheck"
 >
   <el-button size="small" type="primary">點(diǎn)擊上傳</el-button>
   <div slot="tip" class="el-upload__tip">
     <p>只支持.png / .jpg / .jpeg / .doc / .docx / .txt / .xls / .xlsx文件</p>
     <p>最多上傳5個(gè)文件</p>
   </div>
 </el-upload>

1、accept:限制上傳的文件類型
2、action: 必選參數(shù),上傳的地址,可以暫時(shí)設(shè)置為"#"
3、multiple: 設(shè)置選擇文件時(shí)可以一次進(jìn)行多選
4、limit:限制上傳的文件的數(shù)量
5、auto-upload:是否自動(dòng)上傳,false為手動(dòng)上傳
(因?yàn)槲倚枰捅韱我黄鹛砑拥椒?wù)器,所以點(diǎn)擊上傳時(shí)只是到頁面,后面點(diǎn)擊確定才到服務(wù)器)
需要注意:當(dāng):auto-upload="false"手動(dòng)上傳的時(shí)候,:before-upload="beforeUpload"上傳前校驗(yàn)失效,兩者不可以同時(shí)用,可以將校驗(yàn)加在:on-change里面
6、file-list:文件列表

script
記得引入

import axios from 'axios'
data() {
	return {
		// 上傳附件
      fileList: [],
      headers: {
        'Content-Type': 'multipart/form-data'
      },
	}
},
methods: {
	// 文件狀態(tài)改變時(shí)的鉤子
	handleChange(file, fileList) { // 文件數(shù)量改變
      this.fileList = fileList
      const isLt2M = (file.size / 1024 / 1024 < 2)
      if (!isLt2M) {
        this.$message.error('上傳頭像圖片大小不能超過 2MB!')
        this.fileList.pop()
      }
      return isLt2M
    },
    // 文件超出個(gè)數(shù)限制時(shí)的鉤子
    limitCheck() {
      this.$message.warning('每次上傳限制最多五個(gè)文件')
    },
    // 文件刪除的鉤子
    removeFile(file, fileList) {
      this.fileList = fileList
    },
    // 點(diǎn)擊確定按鈕 上傳文件
    confirm() {
    	var param = new FormData()
    	this.fileList.forEach((val, index) => {
    		param.append('file', val.raw)
    	})
    	// 拿取其他的信息
    	param.append('id', sessionStorage.getItem('id'))
    	...
    	axios(`url......`, {
   			headers: {
              'Authorization': 'Bearer ' + sessionStorage.getItem('token'),
              'Content-Type': 'multipart/form-data'
            },
            method: 'post',
            data: param
          	}).then((res) => {
	            if (res.data.code === 200) {
	              this.$message.success('上傳成功')
	            } else {
	              this.$message.error('上傳失敗')
	            }
          })
    }
}

2、文件回顯

文件回顯時(shí),只展示上傳的內(nèi)容
如果上傳圖片,直接展示縮略圖,可進(jìn)行放大預(yù)覽操作
如果上傳其他文件,展示固定的圖片(圖片可自己設(shè)置),可在網(wǎng)頁進(jìn)行下載操作

在這里插入圖片描述


在這里插入圖片描述

html

<el-upload
   :file-list="fileList"
   action="#"
   list-type="picture-card"
 >
   <div slot="file" slot-scope="{file}">
     <img
       class="el-upload-list__item-thumbnail"
       :src="file.url"
       alt=""
     >
     <span class="el-upload-list__item-actions">
     	// 下載
       <span
         v-if="updataIf(file)"
         class="el-upload-list__item-delete"
         @click="handleDownload(file)"
       >
         <i class="el-icon-download" />
       </span>
       // 放大預(yù)覽
       <span
         v-else
         class="el-upload-list__item-preview"
         @click="handlePictureCardPreview(file)"
       >
         <i class="el-icon-zoom-in" />
       </span>
     </span>
   </div>
 </el-upload>
 <el-dialog :visible.sync="dialogVisible" :append-to-body="true">
   <img width="100%" height="100%" :src="dialogImageUrl" alt="">
 </el-dialog>

script
記得引入

import axios from 'axios'
data() {
	return {
		dialogImageUrl: '',
	    dialogVisible: false,
	    fileList: []
	}
},
created() {
	this.getDetail()
},
methods: {
	// 判斷文件類型,圖片預(yù)覽,文件下載
    updataIf(e) {
      if (e.fileName) {
        if (e.fileName.split('.')[1] === 'png' || e.fileName.split('.')[1] === 'jpeg' || e.fileName.split('.')[1] === 'jpg') {
          return false
        } else {
          return true
        }
      } else {
        if (e.name.split('.')[1] === 'png' || e.name.split('.')[1] === 'jpeg' || e.name.split('.')[1] === 'jpg') {
          return false
        } else {
          return true
        }
      }
    },
	// 獲取詳情
	getDetail() {
		this.fileList = []
		// 調(diào)用查詢的接口
		...
		...
		// 調(diào)用成功
		if (res.code === 200) {
			var arr = []
			// res.data.fileMap為返回的Object格式的文件數(shù)據(jù)
			// 因?yàn)榉祷氐母袷绞?{name: url,name: url}
			// 循環(huán)轉(zhuǎn)變成需要的數(shù)組格式,每個(gè)數(shù)組元素包含name、url、id
			// [{name: name,url: ulr,id: id},{name: name,url: ulr,id: id}]
			Object.keys(res.data.fileMap).forEach(key => {
			   var obj = {
			     name: '',
			     url: '',
			     id: ''
			   }
			   // 數(shù)組元素里面的name就是key
			   obj.name = key
			   // 數(shù)組元素里面的url,當(dāng)時(shí)圖片的時(shí)候直接用url
			   // 當(dāng)不為圖片的時(shí)候,顯示固定的圖片,且傳入id(id用于下載文件)
			   if (key.split('.')[1] === 'png' || key.split('.')[1] === 'jpeg' || key.split('.')[1] === 'jpg') {
			     obj.url = 'http://.../file/minio/view/chs/' + res.data.fileMap[key]
			   } else {
			     // 所有文件統(tǒng)一圖片
			     obj.url = require('../../../assets/images/fileImg.png')
			     obj.id = res.data.fileMap[key]
			   }
			   arr.push(obj)
			 })
			 // 將組好的格式直接賦值給fileList(文件列表)
			 this.fileList = arr
		} 
	},
	// 放大預(yù)覽
	handlePictureCardPreview(file) {
      this.dialogImageUrl = file.url
      this.dialogVisible = true
    },
    // 文件下載
    handleDownload(file) {
      axios(`url.......`, {
        headers: {
          'Authorization': 'Bearer ' + sessionStorage.getItem('token'),
          'Content-Type': 'application/octet-stream'
        },
        methods: 'get',
        params: {
          id: file.id
        },
        responseType: 'blob'
      }).then((res) => {
        if (res.status === 200) {
          const content = res.data
          const blob = new Blob([content])
          const fileName = file.name
          if ('download' in document.createElement('a')) { // 非IE下載
            const elink = document.createElement('a')// 創(chuàng)建一個(gè)a標(biāo)簽通過a標(biāo)簽的點(diǎn)擊事件區(qū)下載文件
            elink.download = fileName
            elink.style.display = 'none'
            elink.href = URL.createObjectURL(blob)// 使用blob創(chuàng)建一個(gè)指向類型數(shù)組的URL
            document.body.appendChild(elink)
            elink.click()
            URL.revokeObjectURL(elink.href) // 釋放URL 對(duì)象
            document.body.removeChild(elink)
          } else { // IE10+下載
            navigator.msSaveBlob(blob, fileName)
          }
        }
      }).catch(res => {
        console.log(res)
      })
    },
}

關(guān)于type: “application/octet-stream“ 格式的數(shù)據(jù)并下載主要參考下面這篇文章 http://m.fzitv.net/javascript/3086322zm.htm

style
隱藏el-upload上傳

// 隱藏上傳
::v-deep .el-upload.el-upload--picture-card{
  display: none;
}
// 隱藏右上角綠色標(biāo)志
::v-deep .el-upload-list__item-status-label{
  display: none !important;
}

到此這篇關(guān)于Vue項(xiàng)目el-upload 上傳文件及回顯照片和下載文件功能實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Vue el-upload 上傳文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue自定義filters過濾器

    vue自定義filters過濾器

    這篇文章主要介紹了vue自定義filters過濾器的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-04-04
  • Vue+Element ui實(shí)現(xiàn)樹形控件右鍵菜單

    Vue+Element ui實(shí)現(xiàn)樹形控件右鍵菜單

    這篇文章主要為大家詳細(xì)介紹了Vue+Element ui實(shí)現(xiàn)樹形控件右鍵菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • vue單頁應(yīng)用加百度統(tǒng)計(jì)代碼(親測有效)

    vue單頁應(yīng)用加百度統(tǒng)計(jì)代碼(親測有效)

    這篇文章主要介紹了vue單頁應(yīng)用加百度統(tǒng)計(jì)代碼的解決方法,需要的朋友參考下吧
    2018-01-01
  • 如何解決vuex在頁面刷新后數(shù)據(jù)被清除的問題

    如何解決vuex在頁面刷新后數(shù)據(jù)被清除的問題

    這篇文章主要介紹了如何解決vuex在頁面刷新后數(shù)據(jù)被清除的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Vue加載讀取本地txt/json等文件的實(shí)現(xiàn)方式

    Vue加載讀取本地txt/json等文件的實(shí)現(xiàn)方式

    這篇文章主要介紹了Vue加載讀取本地txt/json等文件的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue請(qǐng)求按順序執(zhí)行的示例詳解

    vue請(qǐng)求按順序執(zhí)行的示例詳解

    我們有時(shí)候會(huì)碰到這種情況,需要連續(xù)發(fā)送兩個(gè)請(qǐng)求,第二個(gè)請(qǐng)求需要用第一個(gè)請(qǐng)求的某個(gè)返回值作為參數(shù)來作為第二個(gè)請(qǐng)求的請(qǐng)求參數(shù),這篇文章主要介紹了vue請(qǐng)求如何按順序執(zhí)行,需要的朋友可以參考下
    2023-12-12
  • vuex-persist 使用場景分析

    vuex-persist 使用場景分析

    Vuex-Persist 是一個(gè)用于在 Vuex 中實(shí)現(xiàn)持久化狀態(tài)的庫,它可以用來解決應(yīng)用程序在刷新瀏覽器或關(guān)閉頁面后丟失 Vuex store 中狀態(tài)的問題,本文給大家介紹vuex-persist 可以用來干什么,感興趣的朋友一起看看吧
    2023-11-11
  • Vue實(shí)現(xiàn)一個(gè)無限加載列表功能

    Vue實(shí)現(xiàn)一個(gè)無限加載列表功能

    這篇文章主要介紹了Vue實(shí)現(xiàn)一個(gè)無限加載列表功能,需要的朋友可以參考下
    2018-11-11
  • vue中如何讓子組件修改父組件數(shù)據(jù)

    vue中如何讓子組件修改父組件數(shù)據(jù)

    這篇文章主要介紹了vue中子組件修改父組件數(shù)據(jù)的相關(guān)資料,文中介紹了vue中watch的認(rèn)識(shí),關(guān)于子組件修改父組件屬性認(rèn)識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • Vue和relation-graph庫打造高質(zhì)量的關(guān)系圖應(yīng)用程序

    Vue和relation-graph庫打造高質(zhì)量的關(guān)系圖應(yīng)用程序

    這篇文章主要介紹了Vue和relation-graph庫打造高質(zhì)量的關(guān)系圖應(yīng)用程序,在這篇文章中,我們深入探討了如何使用Vue和relation-graph高效打造關(guān)系圖,我們?cè)敿?xì)介紹了數(shù)據(jù)準(zhǔn)備、關(guān)系映射、點(diǎn)擊事件等關(guān)鍵步驟,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

丰宁| 西充县| 醴陵市| 灯塔市| 吉木萨尔县| 泾阳县| 额济纳旗| 台山市| 武安市| 新干县| 大竹县| 衡东县| 麻江县| 峡江县| 吉林市| 灵台县| 图片| 旬阳县| 台中县| 瑞昌市| 甘南县| 额敏县| 安化县| 东光县| 吉林市| 阿瓦提县| 甘肃省| 潍坊市| 达孜县| 巫山县| 红桥区| 察哈| 公主岭市| 启东市| 柳江县| 东安县| 资中县| 全州县| 秭归县| 始兴县| 舟曲县|