vue文件上传功能_vue如何自定义组件

vue文件上传功能_vue如何自定义组件vue的文件上传组件upload,拥有支持多种格式文件上传,单文件多文件等都支持,许多项目现在都少不了文件上传功能,但是vue的upload组件如果直接引用,肯定也有一些不方便之处,有的时候需要传参数,需要手动触发上传方法,而不是选择了文件就上传,所以结合我项目实例,写一vue自定义文件上传的实现,包括前端和后台的处理以及参数的接收。一、先认识一下vue的upload组件,官网链接ht…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

vue的文件上传组件 upload ,拥有支持多种格式文件上传,单文件多文件等都支持,许多项目现在都少不了文件上传功能,但是vue 的upload组件如果直接引用,肯定也有一些不方便之处,有的时候需要传参数,需要手动触发上传方法,而不是选择了文件就上传,所以结合我项目实例,写一vue 自定义文件上传的实现,包括前端和后台的处理以及参数的接收。

一、先认识一下vue 的upload组件,官网链接 http://element-cn.eleme.io/#/zh-CN/component/upload,这里不多做解释,大家自己看

二、使用

这个组件有多种样式,我在这里只展示一种,如图所示

vue文件上传功能_vue如何自定义组件

代码:

class=”upload-demo”

drag

:action=”url”        //此处的url是从父页面传过来的动态值,不同页面引用,可能请求的后台地址不一样,所以定义了一个变量接收

:multiple=”false”

:before-upload=”beforeUpload”     //上传之前调用的方法,验证,格式限制等等,大小限制都可以在这个方法中实现

:limit=1     //个数限制

:auto-upload=”false”  //是否立即上传,默认为true

:on-exceed=”handleExceed” //文件超出个数限制时的钩子

:http-request=”uploadFile”>  //自定义提交方法

将文件拖到此处,或
点击上传
只能上传.xlsx文件
一次只能上传一个文件

export default {

props:{visible:false, //父页面传递参数

initData:{}, //父页面传递参数

url:””  //父页面传递上传url

},

watch: {  //监听参数值改变

initData(newValue,oldValue){

this.getData(newValue);

console.log(“newValue2333”,newValue);

}

},

data() {

return {

params:{},

}

},

mounted(){

},

methods:{

close() {

this.$emit(“update:visible”, false);

},

beforeUpload (file) {  //设置只能上传excel文件

console.log(‘beforeUpload’)

console.log(file.type)

const isExcel = file.type === ‘application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’

if(isExcel){

return true;

}else{

this.$message.warning(`只能上传excel文件`)

return false;

}

},

// 上传文件个数超过定义的数量

handleExceed (files, fileList) {

this.$message.warning(`当前限制选择 1 个文件,请删除后继续上传`)

},

// UploadUrl:function(){

// return

// },

getData(initData){   //参数值改变重新赋值

this.params=initData;

},

//确认上传

submitUpload(){

this.$refs.upload.submit();

},

//开始上传文件

uploadFile(content){

console.log(“uploadFile”,content);

const formData=new FormData();

formData.append(“file”,content.file);

formData.append(“params”,this.params);    //后台接收param时可以vue可以先将params转成json字符串,后台接收一个json字符串再遍历,自己百度

//发送请求

console.log(this.params);

this.commonPost({

url:content.action,

params:formData,

timeout:2000,

}).then(data=>{

this.$message({

type:”success”,

message:”上传文件成功”

});

//关闭上传弹出框

this.close();

})

}

}

};

由于我这个是做的一个公共组件,可以作为其他页面的一个组件给放进去,所以会有一些特别之处,,大部分在代码中都有注释。

三、父页面部分代码

   在需要的地方引用这句话,

import InportExcel from ‘@/api/pfm/common/InportExcel’;   //引入InportExcel

watch:{

headerId:function(val,oldval){

if(val && val != -1){

this.fileData={};          //参数监听

this.fileData.currentHeaderId=val; //参数赋值

this.urlString=” http://localhost:8080/pfm/file/upFile”; //url赋值

}

}

components:{      //InportExcel注册

InportExcel:InportExcel

}

四、后台代码处理

1、controller

@PostMapping(“/upFile”)

public Object upLoadFile(@RequestParam(“file”) MultipartFile file,@RequestParam(“params”) String params,

HttpServletResponse response,HttpServletRequest request){

Workbook workbook=null;

try{

if(params!=null){

JSONObject json=JSONObject.parseObject(params);

if(json.containsKey(“currentHeaderId”)){

System.out.println(json.get(“currentHeaderId”).toString());

}

}

workbook= fileService.uploadFile(file,request,response);

}catch (Exception e){

logger.info(e.getMessage());

}

return workbook;

}

2、service实现

@Override

public Workbook uploadFile(MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException {

checkFile(file);

System.out.println(file);

return getWorkBook(file);

//接收文件

}

public static void checkFile(MultipartFile file) throws IOException {

if(null==file){

logger.info(“文件不存在”);

throw new FileNotFoundException(“文件不存在”);

}

String fileName=file.getOriginalFilename();

System.out.println(fileName.endsWith(“xls”));

if(!fileName.endsWith(“xls”)&&!fileName.endsWith(“xlsx”)){

logger.info(“不是excel文件”);

throw new IOException(fileName+”不是excel文件”);

}

}

public static Workbook getWorkBook(MultipartFile file){

String fileName=file.getOriginalFilename();

Workbook workbook=null;

try{

InputStream is=file.getInputStream();

if(fileName.endsWith(“xls”)){

workbook=new HSSFWorkbook(is);

}else if(fileName.endsWith(“xlsx”)){

workbook=new XSSFWorkbook(is);

}

}catch (IOException e){

logger.info(e.getMessage());

}

return workbook;

}

3、注,本次后台代码只针对excel文件,如果是其他文件,也可以进行百度,处理方法很简单

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170646.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Nginx 502 Bad Gateway 的错误的解决方案

    Nginx 502 Bad Gateway 的错误的解决方案我用的是nginx反向代理Apache,直接用Apache不会有任何问题,加上nginx就会有部分ajax请求502的错误,下面是我收集到的解决方案。一、fastcgi缓冲区设置过小出现错误,首先要查找nginx的日志文件,目录为/var/log/nginx,在日志中发现了如下错误2013/01/1713:33:47[error]15421#0:*16upstr…

    2022年6月26日
    26
  • Android的启动模式:singleTask与singleTop的使用

    Android的启动模式:singleTask与singleTop的使用最近有小伙伴询问Activity的启动模式是使用singleTask好还是singleTop好,在两种模式中纠结,所以今天就简单讲解一下两种模式的使用场景!Android的四种启动模式(网上一搜一堆哦)standard:默认模式,允许多实例singleTop:相比于standard,有新的启动请求时,只有在目标Activity处于当前栈顶时,才会调用onNewIntent()…

    2022年4月19日
    186
  • pycharm无法使用第三方库_pycharm第三方库安装路径

    pycharm无法使用第三方库_pycharm第三方库安装路径有时候更新第三方库一直失败,猜测是源的问题,换成豆瓣的源后依然更新不了,参照网上搜索最后解决了问题,这里留个解决方法。方式一:pycharm里换源。自带是国外的源,更换为国内的访问更快更稳定,提供几个能用的源:清华:https://pypi.tuna.tsinghua.edu.cn/simple豆瓣:https://pypi.douban.com/simple/阿里:https://mirrors.aliyun.com/pypi/simple/我用的阿里。步骤:File>Settin

    2022年8月29日
    5
  • 超详细,手把手 教你 SQLyog 安装教程[通俗易懂]

    超详细,手把手 教你 SQLyog 安装教程[通俗易懂]1.点击SQLyog.exe,如下图2.点击ok,如下图3.点击下一步4.接收协议,点击下一步5.下一步6.更改安装路径,点击安装7.下一步,完成8.注册,需要密钥,名字随意密钥:dd987f34-f358-4894-bd0f-21f3f04be9c19.注册完成,如下图9.新建连接,并随意起个名字10.输入密码,连接数据库11.连接成功之后,就可以使用了…

    2022年5月28日
    1.3K
  • hash表存储方式_哈希表与数据的存储结构有关吗

    hash表存储方式_哈希表与数据的存储结构有关吗HashSet集合的自身特点: *   1、底层数据结构:哈希表 *   2、存储,拿取都比较快 *   3、线程不安全,运行速度快代码实现如下:packageitcast.demo1;importjava.util.HashSet;/**HashSet集合的自身特点:* 底层数据结构:哈希表* 存储,拿取都比较快* 线…

    2025年5月27日
    2
  • Activity工作流学习总结

    Activity工作流学习总结1.概念工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。2.Activity介绍Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、…

    2022年5月3日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号