vue+axios+elementUI文件上传与下载

vue+axios+elementUI文件上传与下载

Simple_Learn 关注

0.5 2018.05.30 10:20 字数 209 阅读 15111评论 4喜欢 6

1.文件上传

这里主要介绍一种,elementUI官网 上传组件 http-request 这种属性的使用。

图片.png

代码如下:

 <el-upload class="uploadfile" action="" :http-request=‘uploadFileMethod‘ :show-file-list="false" multiple>
      <el-button class="custom-btn" size="small">上传</el-button>
 </el-upload>

uploadFileMethod方法如下:

        uploadFileMethod(param) {
            const id = this.currentRowObject.id;
            let fileObject = param.file;
            let formData = new FormData();
            formData.append("file", fileObject);

            this.$store
                .dispatch("UploadFile", { formData: formData, id: id })
                .then(response => {
                    if (Array.isArray(response)) {
                        if (response) {
                            this.$message({
                                showClose: true,
                                message: "上传成功。",
                                type: "success"
                            });
                            this.getFileList(id);
                        }
                    } else {
                        this.$message.error(response.message);
                    }
                    console.log("response==", response);
                })
                .catch(message => {
                    console.log("message======================", message);
                    this.$message.error("上传失败,请联系管理员");
                });
        },

这里需要设置header属性

api文件

这里是因为封装了axios方法,还使用了vuex。

vuex中文件

可将ajax直接替换成axios就好,具体可参见{axios}如下:

axios.post(‘/upload‘, formData, { headers: { ‘Content-Type‘: ‘multipart/form-data‘ } })

这里formData就是要向后台传的数据。

2.文件下载

2.1 一种是url式的下载,相当于get请求下载
后台提供一个url。前端a标签href设置上就好。


    //带文件名的单个文件下载
    @RequestMapping(path = "/downloadwithname/{id}", method = RequestMethod.GET)
    public void downloadWithFileName(@PathVariable(name = "id") String strId,
                                     HttpServletResponse response) {
        Long id = Utils.stringTransToLong(strId);
        //设置Content-Disposition
        String fileName = fileService.getFileName(id);
        InputStream inputStream = fileService.download(id);
        OutputStream outputStream = null;
        try {
            response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));
            outputStream = response.getOutputStream();
            IOUtils.copy(inputStream, outputStream);
            response.flushBuffer();
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
            throw new BizBaseException("server error.");
        } finally {
            IOUtils.closeQuietly(inputStream);
            IOUtils.closeQuietly(outputStream);
        }
    }

图片.png

2.2一种是post请求下载 (以流的形式下载文件)

 downloadFile() {
            const rowId = this.currentRowObject.id;
            const rowName = this.currentRowObject.name;
            let params = {
                ids: this.checkedFileId,
                id: rowId
            };
            this.$store
                .dispatch("DownloadFile", params)
                .then(res => {
                    if (res) {
                        console.log("download===",res);
                        const content = res.data;
                        const blob = new Blob([content]);
                        const fileName = `${rowName}.zip`;
                        if ("download" in document.createElement("a")) {
                            // 非IE下载
                            const elink = document.createElement("a");
                            elink.download = fileName;
                            elink.style.display = "none";
                            elink.href = URL.createObjectURL(blob);
                            document.body.appendChild(elink);
                            elink.click();
                            URL.revokeObjectURL(elink.href); // 释放URL 对象
                            document.body.removeChild(elink);
                        } else {
                            // IE10+下载
                            navigator.msSaveBlob(blob, fileName);
                        }
                    }
                })
                .catch(() => {
                    this.$message.error("下载附件失败,请联系管理员");
                });
        }

api.js

vuex

总之如下:

axios.post(‘/download‘, data, {responseType:‘blob‘ })

后端这里需要设置header:

response.setContentType("application/octet-stream");

        // 以流的形式下载文件
        try {
            InputStream fis = new BufferedInputStream(new FileInputStream(zipFilePath));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            response.reset();// 清空response
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(zipName, "UTF-8"));// 如果输出的是中文名的文件,在此处就要用URLEncoder.encode方法进行处理
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            //删除临时压缩文件
            try {
                File f = new File(zipFilePath);
                f.delete();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

就先简单介绍这里,如有问题可以留言讨论学习。

原文地址:https://www.cnblogs.com/mouseleo/p/11215309.html

时间: 2024-10-11 05:20:53

vue+axios+elementUI文件上传与下载的相关文章

JavaWeb学习总结(五十)——文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

深入分析JavaWeb Item40 -- 文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

文件上传与下载!

1.上传: 1.上传数据的类型:字符,字节 1.文本类型(字符):通过url网址的?:通过表单元素:AJAX. 2.文件类型(字节):通过表单元素(file). 2.上传文件的方式: 1.form表单实现文件上传:常用方式(上传文件用post,不用get,因为get方式对于上传量有限) 通过鼠标单击,在File标签中选择的文件,才能上传. 2.通过AJAX实现文件上传:禁用方式   AJAX的数据传递通过javascript脚本取值.如果传递文件,那么也需要通过javascript脚本获取文件内

springmvc和servlet下的文件上传和下载(存文件目录和存数据库Blob两种方式)

项目中涉及了文件的上传和下载,以前在struts2下做过,今天又用springmvc做了一遍,发现springmvc封装的特别好,基本不用几行代码就完成了,下面把代码贴出来: FileUpAndDown.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>using commons Uplo

struts2中的文件上传和下载

天下大事,必做于细.天下难事,必作于易. 曾经见过某些人,基础的知识还不扎实就去学习更难的事,这样必然在学习新的知识会很迷惑结果 再回来重新学习一下没有搞懂的知识,这必然会导致学习效率的下降!我写的这篇上传和下载都很基础. 十分适合初学者! jsp:页面 <!--在进行文件上传时,表单提交方式一定要是post的方式,因为文件上传时二进制文件可能会很大,还有就是enctype属性,这个属性一定要写成multipart/form-data, 不然就会以二进制文本上传到服务器端--> <for

JavaWeb文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请 求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common- fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,st

Linux 指令篇:文件上传和下载 lrzsz

[ "lrzsz"一般用于SecureCRT ssh中使用 ] 简介:rz,sz是早期Linux/Unix同Windows进行ZModem文件传输的命令行工具.rz ,sz 是非常古老的zmodem协议使用的上传下载命令,早就被抛弃了的东西,目前的发行版基本都不再预装. 优点:比ftp命令方便,而且服务器不用打开FTP服务. 命令sz:将选定的文件发送(send)到本地机器 命令rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到Linux服务器. lrzsz安装方法: [[e

FileUpload系列:(3)文件上传和下载示例

示例由1个Servlet和3个JSP组成. 1.FileServlet package com.rk.web.servlet; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.util.Has

JavaWeb学习总结,文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru