iview Upload组件多文件上传,以及vue文件下载

iview Upload组件多文件上传

系统经常遇到文件上传的问题,iview提供了Upload组建,能够很好的实现文件上传,当然一次上传多个文件也是允许的。

思路:创建一个数组 把需要上传的文件 push到这个数组里面

1.引用组件

2.手动上传,根据官方文档 设置:before-upload ="handleUpload"等于false

(1).:before-upload 是 iview Upload 上传组件的一个属性 设置返回值为 false 可以阻止默认上传方式(自动上传模式)

(2).handleUpload 是上传处理方法,可以用于准备需要上传的文件。

技术范围:vue ,springboot

3.上传方法   

1          //创建 formData 对象
2           let formData = new FormData();
3           //向 formData 对象中添加文件--这是其他参数
4           formData.append(‘jsid‘, _jsid);
5           //多个文件上传----------重点----需要把已经存储到本地的文件加入 formData所以这里用for循环
6           for(var i=0; i< that.file.length; i++){
7            formData.append("uploadFile",that.file[i]);  // 文件对象
8           }

需要的变量

1 add: {
2     dialog: false,
3     uploadFile: []
4 },
5 loadingStatus: false

HTML代码如下:

 1 <Modal v-model="add.dialog" title="文件上传" :loading="true" :closable="false" width="540">
 2 <Tabs>
 3     <TabPane label="选择文件">
 4     <Upload :before-upload="handleUpload" action multiple :format="[‘docx‘,‘doc‘,‘txt‘, ‘pdf‘]">
 5         <Button icon="ios-cloud-upload-outline">Select the file to upload</Button>
 6     </Upload>
 7     <div>
 8         <ul class="file-list" v-for="(list,index) in add.uploadFile" :key="index">
 9          <li>
10             <span style="font-size:15px;color:#FFFFFF">文件名: {{ list.name }}</span>
11             <Icon type="ios-close" size="25" color="red" @click="delFileList(index)"></Icon>
12          </li>
13         </ul>
14     </div>
15     </TabPane>
16 </Tabs>
17 <div slot="footer">
18 <Button type="text" size="large" @click="cancleUpload">取消</Button>
19 <Button
20 type="primary"
21 @click="upload"
22 :loading="loadingStatus"
23 >{{ loadingStatus ? ‘上传中...‘ : ‘上传‘ }}</Button>
24 </div>
25 </Modal>

需要的数据处理方法

 1 delFileList(index) {
 2   this.add.uploadFile.splice(index, 1);
 3 },
 4 handleUpload(file) {
 5  this.add.uploadFile.push(file);
 6  return false;
 7 },
 8 upload() {
 9     this.loadingStatus = true;
10     console.log("上传:"+this.add.uploadFile);
11     var formData = new FormData();
12     if (this.add.uploadFile.length > 0) {
13         //多个文件上传
14         for (var i = 0; i < this.add.uploadFile.length; i++) {
15             formData.append("uploadFile", this.add.uploadFile[i]); // 文件对象
16         }
17         this.$http
18         .postFile(this.ports.package.upload, formData)  //使用自己封装的axios方法
19         .then(rdata => {
20             console.log(rdata);
21             if (rdata.data.succ) {
22                 this.loadingStatus = false;
23                 this.add.uploadFile = [];
24                 this.$Message.success("Success");
25                 this.add.dialog = false;
26             }
27         })
28         .catch(error => {
29         this.loadingStatus = false;
30         this.$Message.error("服务器错误" + error);
31      });
32     } else {
33     this.loadingStatus = false;
34     this.$Message.error("请至少上传一个文件");
35     }
36 },

后期接收文件,我后台用的是springboot

 1 @RequestMapping(value = "/upload", method = RequestMethod.POST)
 2 public PackageResponse uploadPackage(HttpServletRequest request,
 3 HttpServletResponse response,
 4 @RequestParam("uploadFile") MultipartFile[] uploadFile) {
 5     try {
 6         for (MultipartFile multipartFile : uploadFile) {
 7
 8         }
 9
10     } catch (Exception e) {
11         response.setStatus(400);
12         return SimpleResponse.FAIL;
13     }
14     return SimpleResponse.SUCC;
15 }

这样整个文件上传基本就完成了!

vue文件下载

能上传就要能下载,文件的下载就很简单了,我使用的使用response返回文件流的方式

 1 methods: {
 2     toDownload() {
 3         axios({
 4                 method: ‘post‘,
 5                 url: url,
 6                 timeout: MAX_TIME_OUT_MS,
 7                 responseType: ‘blob‘
 8             }).then(res => {
 9                 console.log(res);
10                 this.download(res.data);
11             })
12             .catch(err => {
13                 console.log(err);
14                 if (err.response.status == 400) {
15                     this.$Message.error("下载出错,文件可能不存在!!");
16                 }
17             });
18     },
19     // 下载文件
20     download(data) {
21         if (!data) {
22             return;
23         }
24         let url = window.URL.createObjectURL(new Blob([data]));
25         let link = document.createElement("a");
26         link.style.display = "none";
27         link.href = url;
28         link.setAttribute("download", "aaa.zip");
29
30
31         document.body.appendChild(link);
32         link.click();
33         this.$Message.info("下载完成!");
34         this.cancle();
35     },
36     cancle() {
37         this.$router.push({
38             path: "/edit"
39         });
40     }
41 }

springboot servie处理

 1 public AppResponse download(HttpServletRequest request, HttpServletResponse response, String id) throws FileNotFoundException,IOException {
 2     String filePathName = base + downloadPath + id ;
 3     //3 下载
 4     String zipFileName = filePathName + ".zip";
 5     String filename = filePathName + ".zip";
 6     //设置文件类型
 7     response.setContentType("application/octet-stream");
 8
 9
10     response.setCharacterEncoding("UTF-8");
11     //设置Content-Disposition
12     response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "utf-8"));
13     InputStream in = new FileInputStream(zipFileName);
14     OutputStream out = response.getOutputStream();
15     //写文件
16     int b;
17     while ((b = in.read()) != -1) {
18         out.write(b);
19     }
20     out.flush();
21     in.close();//先关闭输入流才能删除
22     out.close();
23     return SimpleResponse.SUCC;
24 }

原文地址:https://www.cnblogs.com/Actexpler-S/p/11104907.html

时间: 2024-10-10 22:46:38

iview Upload组件多文件上传,以及vue文件下载的相关文章

element-ui upload组件多文件上传

之前有一篇写的如何同时传递form表单及upload组件文件,如果有多个upload文件该如何传递呢 上代码 html 1 <el-form-item label="实验信息" prop="expvmInstruction"> 2 <el-upload 3 class="upload-demo" 4 drag 5 ref="uploadhtml" 6 :action="upload_url"

使用Commons FileUpLoad组件实现文件上传功能

Commons 是Apache开放的源码组织的一个java子项目,该项目主要涉及一些开发中常用的模块,如文件上传,命令行处理,数据库连接池等.FileUpLoad就是其中的一个用于处理HTTP文件上传的子项目.Commons FileUpLoad组建具有以下几个特点: 1.使用简单:Commons FileUpLoad组件可以方便的嵌入JSP文件中,在JSP文件中仅编写少量代码就可完成文件上传功能,十分方便. 2.能够全程控制上传的内容:使用Commons FileUpLoad组件提供的对象及操

jquery组件WebUploader文件上传用法详解

这篇文章主要为大家详细介绍了jquery组件WebUploader文件上传用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件,下文来为各位演示一下关于jquery WebUploader文件上传组件的用法. 使用WebUploader还可以批量上传文件.支持缩略图等等众多参数选项可设置,以及多个事件方法可调用,你可以随心所欲的定制你要的上传组件. 接下来我以图片上

使用commons-fileupload-1.2.1.jar等组件实现文件上传

使用的主要jar包:commons-io-1.3.2.jar包;commons-fileupload-1.2.1.jar包:commons-lang-2.3.jar,在使用组件实现文件上传时候要注意前后台的一致性,注意在后台定义File文件对象名要与jsp页面中的file标签name名字一致,前台form标签属性一定要设置为enctype="multipart/form-data",而且传输方式必须是post方式.不然后台不认为提交的是文件类型,而认为是普通表单的提交. 废话不多说看主

用Commons-FileUpload组件实现文件上传

一.用Commons-FileUpload组件实现文件上传 1.导入两个jar包 FileUpload下载地址: http://commons.apache.org/fileupload/ 下载:commons-fileupload-1.2.2-bin.zip    得到:commons-fileupload-1.2.2.jar http://commons.apache.org/io/ 下载:commons-io-1.4-bin.zip       得到:commons-io-1.4.jar

jsp实现文件上传(二)用cos组件实现文件上传

jsp表单 <%@ page language="java" pageEncoding="utf-8"%> <html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <form action="cos.jsp" method="post" en

用jspSmartUpload组件实现文件上传、下载

jspSmartUpload组件,可从http://download.csdn.net/user/dearchuansir下载,压缩包的名字是jspSmartUpload.zip.下载后,将其解压到Tomcat的webapps目录下.解压后,将webapps/jspsmartupload目录下的子目录Web-inf名字改为全大写的WEB-INF,这样一改jspSmartUpload类才能使用.如果想让Tomcat服务器的所有Web应用程序都能用它,必须做如下工作: 1.进入命令行状态,将目录切换

MVC文件上传-使用jQuery.FileUpload和Backload组件实现文件上传

本篇使用客户端jQuery-File-Upload插件和服务端Badkload组件实现多文件异步上传.MVC文件上传相关兄弟篇: 处理文件上传的服务端组件Backload 用于处理文件上传的服务端组件.Backload与客户端文件上传插件(比如jQuery-File-Upload)配合使用,初步形成一个处理文件异步上传的解决方案. □ Badkload的一些功能和特点 ● 零配置:Backload提供默认BackloadDemoController用来处理上传文件请求.如果其它控制器也想拥有"B

Java使用Commons-FileUpload组件实现文件上传最佳方案

学习的目标 使用commons-fileupload实现文件上传 使用commons-fileupload封装文件上传工具类 什么是commons-fileupload? The CommonsFileUploadpackage makes it easy to add robust, high-performance, file upload capability to your servlets and web applications. FileUpload parses HTTP req