vue上传文件和下载文件

本文介绍了如何在Vue项目中使用el-upload组件实现文件上传,通过在上传前处理文件,不直接上传,而是保存在前端。同时,展示了如何触发事件实现文件下载,不进行页面跳转。关键点包括before-upload回调、自定义上传逻辑和创建隐藏iframe进行文件下载。
摘要由CSDN通过智能技术生成

背景:最近使用vue进行前端开发,难免会遇到需要上传文件和文件下载的,但el-upload直接上传的方式不符合我的要求,就改了一下实现方式。

element地址

  1. 利用el-upload实现文件上传,不需要直接上传,需要携带其他表单参数或者其他情况下,可以使用以下方法
<template>
	<div>
		
		<!-- 上传文件 -->
		<el-upload
			class="upload-demo"
			action="https://jsonplaceholder.typicode.com/posts/" //我不需要直接上传,我只需要拿到这个文件
			:before-upload = "getUploadFile" //上传之前做处理
			:limit="1"
			:on-exceed="handleExceed"
		>
			<el-button size="small" type="primary">查找文件</el-button>
		</el-upload>
		<div class="el-upload__tip">{{"" == this.uploadFileName ? "暂无文件上传" : this.uploadFileName}}</div>
		<el-button type="primary" @click="uploadFile">确 定</el-button>
	</div>
</template>

<script>
export default {
  	name: "manageFile",
	data() {
		return {
			uploadFileName: "",
			file: null
	   }
	},
	methods: {
	   handleExceed(files, fileList) {
	     this.$message.warning(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
	   },
	   getUploadFile(file){
	   	//返回false,表示终止上传,这边我就拿到需要上传的文件了
	     this.uploadFileName = file.name;
	     this.file = file;
	     return false;
	   },
	   /**
	    * 上传文件
	    */
	   uploadFile(){
	     if(null != this.uploadCategoryForm.file){
	     //这边可以携带参数,id,code,name什么的
	       let formData = new FormData();
	       formData.append('file',this.uploadCategoryForm.file);
	       //这个是axios方法,你自己的方法
	       upload(formData).then(result =>{
	            console.info("上传结果");
	       });
	     }else{
	     	console.info("请选择上传的文件!");
	     }
	   }
	}
}
</script>
  1. 实现文件下载,后端返回文件流,前端触发事件,不做跳转,直接下载
/**
     * 下载文件
     * @param docId
     */
    downloadFile(){
      var elemIF = document.createElement('iframe');
      //这是你后端拼接的url,和axios请求url写法一样,一般为了解决跨域问题,都会做代理,所以一般不会把ip地址拼接上去
      elemIF.src = url;
      elemIF.style.display = 'none';
      //将iframe放到body后面
      document.body.appendChild(elemIF);
    }

总结:不过作啥前端,总是会遇到上传下载的问题,跨域的问题~

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件上传下载是前端开发中非常常见的功能,Vue提供了方便的方法来实现这些功能。 文件上传Vue中可以使用第三方库vue-file-upload来实现文件上传,具体步骤如下: 1. 安装vue-file-upload ```sh npm install vue-file-upload --save ``` 2. 在组件中引入并注册vue-file-upload ```js import Vue from 'vue'; import VueFileUpload from 'vue-file-upload'; Vue.use(VueFileUpload); ``` 3. 在模板中使用vue-file-upload来实现文件上传 ```html <template> <div> <vue-file-upload url="/api/upload" @success="onUploadSuccess" @error="onUploadError" @progress="onUploadProgress" ></vue-file-upload> </div> </template> ``` 其中,url属性指定上传文件的地址,success、error和progress分别指定上传成功、上传失败和上传进度的回调函数。 文件下载Vue中可以使用原生的XMLHttpRequest对象或者第三方库axios来实现文件下载,具体步骤如下: 1. 使用XMLHttpRequest对象下载文件 ```js const xhr = new XMLHttpRequest(); xhr.open('GET', '/api/download', true); xhr.responseType = 'blob'; xhr.onload = () => { if (xhr.status === 200) { const blob = new Blob([xhr.response], { type: 'application/octet-stream' }); const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = 'file.txt'; link.click(); URL.revokeObjectURL(url); } }; xhr.send(); ``` 其中,responseType属性指定响应类型为blob,onload事件中将响应数据转为Blob对象,并创建一个超链接来下载文件。 2. 使用axios下载文件 ```js axios({ method: 'get', url: '/api/download', responseType: 'blob', }).then((response) => { const blob = new Blob([response.data], { type: 'application/octet-stream' }); const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = 'file.txt'; link.click(); URL.revokeObjectURL(url); }); ``` 其中,responseType属性指定响应类型为blob,然后将响应数据转为Blob对象,并创建一个超链接来下载文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值