1.实现功能:文件上传、下载以及删除 不过API中的下载监听方法download一直没有触发,(不确定是我写的有问题还是咋地,反正就是触发不了下载)随用预览的监听方法preview来实现了下载。
组件调用
<new-upload ref="upDataMout" :uploadActionUrl="url.uploadAction" :urlDownload="url.urlDownload" :deleteUrl="url.deleteUrl" @uploadFile="uploadFile" >
</new-upload>
自定义上传组件
<template> <a-upload name="file" :multiple="true" :disabled="disabled" :file-list="fileList1" @change="handleUpload" @preview="download" :remove="handleRemove" :before-upload="beforeUpload" :showUploadList="{ showDownloadIcon:true, showRemoveIcon:true }" > <a-button size="small"><a-icon type="upload" style="font-size: 12px;"/>{{ text }}</a-button> </a-upload> </template> <script> import axios from 'axios' import Vue from 'vue' import {postAction} from '@/api/analysis.js' //接口请求的文件 const FILE_TYPE_ALL = "all" export default { name: 'JUpload', data(){ return { formData:{},//接口传参 fileList1: [], filedirList:[], nameList:[], uploading: false, } }, props:{ text:{ type:String, required:false, default:"点击上传" }, fileType:{ type:String, required:false, default:FILE_TYPE_ALL }, value:{ type:[String,Array], required:false }, // update-begin- --- author:wangshuai ------ date:20190929 ---- for:Jupload组件增加是否能够点击 disabled:{ type:Boolean, required:false, default: false }, // 用于动态传参修改上传路径 uploadActionUrl:{ type:String, required:false, default:"", }, // 下载地址的动态传参 urlDownload:{ type:String, required:false, default:"", }, deleteUrl:{//删除文件的接口 type:String, required:false, default:"", } }, methods:{ uidGenerator(){//随机生成 return '-'+parseInt(Math.random()*10000+1,10); }, add(){//新增原来老数据清空 this.$nextTick(() => { this.fileList1 = []; this.filedirList = []; this.nameList = []; }) }, edit(recode){//编辑文件回显 console.log("编辑1111",recode); const data = recode; const fileName = data.fileName?data.fileName.split(","):[]; const filedir=data.folderId?data.folderId:''; this.fileList1 = []; let fileList = [],filedirList=[]; for(var a=0;a<fileName.length;a++){ fileList.push({ uid:this.uidGenerator, name:fileName[a], status: 'done', url: filedir, response:{ status:"history", message:filedir } }); filedirList.push(filedir); } this.$nextTick(() => { this.fileList1 = fileList; this.filedirList = filedirList; this.nameList = fileName; }) }, handleRemove(file) {//删除文件 this.$confirm("确认删除该文件?",{ type:'error'}).then(()=>{ console.log("确认操作"); const index = this.fileList1.indexOf(file); const newFileList = this.fileList1.slice(); newFileList.splice(index, 1);//把当前的文件删除 this.fileList1 = newFileList; const fileName = file.name; const filedir = this.filedirList[index];//文件地址数组 let newPathList = this.filedirList.slice(); newPathList.splice(index,1);//删除当前文件名 this.filedirList = newPathList; let newNameList = this.nameList.slice(); newNameList.splice(index,1);//删除当前文件名 this.nameList = newNameList; let url = `${this.deleteUrl}?fileName=${fileName}&filedir=${filedir}`; let that = this; postAction(url).then((res) => { if(res.status==1) { let paras={ 'fileName':newNameList, 'filedir':that.filedirList[0] } that.$emit('uploadFile', paras);//文件数据传给父组件 that.$message.success(`删除成功!`); } }) }).catch(()=>{ console.log("取消操作"); }) }, beforeUpload(file) { this.fileList1 = [...this.fileList1, file]; return false; }, handleUpload(file) {//文件上传监听 console.log("file:",file); const { fileList1,filedirList,nameList } = this; const formData = new FormData(); fileList1.forEach(file => { formData.append('files', file); //文件上传的时候传参 if(file.status!="done" && fileList1.length>1){ formData.append('filedir', filedirList[0]); //文件上传的时候传参 } }); this.uploading = true; let that =this; if(file.file.status=="removed"){//删除状态 return; } //文件上传接口请求 axios({ method: "POST", url: `${this.uploadActionUrl}`, data: formData, headers: { 'Content-Type': 'multipart/form-data' } }).then(function(res) { if(res.status==200){ const data = res.data; let path = filedirList,name = nameList; path.push(data.filedir); name.push(file.file.name); that.nameList = name; //文件夹id,一个任务一个id即同一个新增上传多个文件都是同一个id that.filedirList = path; console.log("path:",that.filedirList); that.fileList1[that.fileList1.length-1].url=data.filedir;//接口返回的上传路径 that.fileList1[that.fileList1.length-1].status="done";//必须该状态下才可以预览和下载 that.$message.success(`${data.fileName} 上传成功!`); let paras={ 'fileName':nameList, 'filedir':that.filedirList[0] } that.$emit('uploadFile', paras);//文件数据传给父组件 } console.log(res); }).catch(function(error){ console.log(error); this.$message.warning(error.response); }); }, download(file){//下载文件 // console.log("fileL:",file); const index = this.fileList1.indexOf(file); const filedir=this.filedirList[index]; const that = this; let url = `${this.urlDownload}?fileName=${file.name}&filedir=${filedir}`; window.open(url);//下载文件 }, }, model: { prop: 'value', event: 'change' } } </script> <style scoped> </style>