专栏首页海加尔金鹰的专栏SpringBoot之文件批量上传和下载

SpringBoot之文件批量上传和下载

springboot 文件的批量上传和批量下载

之前学习并使用过文件的单个上传:springboot学习日志之DAY08文件上传功能 最近写程序过程当中需要使用到批量上传和批量下载,批量和单个文件的上传下载还是有很多的区别的。特此记录

文件批量上传

HTML代码:

 <input type="file" name="md" id="article_md" multiple="multiple" onchange="uploadFile()">

注意添加multiple="multiple"属性,这样弹出文件选择框之后就可以选择多个文件。

JS 后台代码:

function uploadFile() {
    var files = $("#article_md")[0].files;
    var formData = new FormData();
    for (let file of files) {
	//将文件属性放入formdata里面,不能直接使用 formData.append("files",files)
        formData.append("files",file,file.name);
    }
    $.ajax({
        url: '/import',
        type: 'post',
        async: false,
        data: formData,
        processData: false,// 告诉jQuery不要去处理发送的数据
        contentType: false,// 告诉jQuery不要去设置Content-Type请求头
        beforeSend: function () {//过程...
            console.log('正在进行,请稍候')
        },
        success: function (res) {
            if (res.code == 0) {
                console.log('上传成功')
            } else {
                console.log('上传失败')
            }
        },
        error: function () {
            console.log('上传失败')
        }
    })
}

JAVA后台代码:

 @PostMapping("/import")
 public AjaxResult importMd(@RequestParam("files") MultipartFile[] files, HttpServletRequest request) {
      	//files 和formdata里面的属性名保持同名原则
        for (MultipartFile file : files) {
     	// 文件处理
        }
        return AjaxResult.SUCCESS();
    }

文件的批量下载

其实批量下载和单个下载都是一样的,区别在于,批量下载是将要下载的所有文件打包成一个压缩文件,然后下载这个压缩文件。

前端代码:

<a href="#" onclick="exportMd()" ></a>

function exportMd(){
    window.location.href = "/export"
}

后端代码:

@GetMapping("/export")
public void exportedMd(HttpServletResponse response) {
        List<MlogArticlesEntity> list = mlogArticlesService.list();
        //生成zip文件存放位置
        long timeMillis = System.currentTimeMillis();
        String strZipPath = "D:/markdowm/" + timeMillis + ".zip";
        File file = new File("D:/markdowm/");
        //文件存放位置目录不存在就创建
        if (!file.isDirectory() && !file.exists()) {
            file.mkdirs();
        }
        try {
	    //通过response的outputStream输出文件
            ServletOutputStream outputStream = response.getOutputStream();
            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(strZipPath));
            for (int i = 0; i < list.size(); i++) {
                out.putNextEntry(new ZipEntry("文件名称"));
                int len;
                // 读入需要下载的文件的内容,打包到zip文件
                out.write("文件内容");
                out.closeEntry();
            }
            out.close();
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(strZipPath));
	//将输入流的数据拷贝到输入流输出
            FileCopyUtils.copy(bis, outputStream);
            
        } catch (IOException e) {
            e.printStackTrace();
        }
	//删除文件或者文件夹下所有文件
	removeDir(file);
    }

private  void removeDir(File dir) {
        File[] files=dir.listFiles();
        for(File file:files){
            if(file.isDirectory()){
                removeDir(file);
            }else{
                file.delete();
            }
        }
    }

总结:很简单的一个功能,但还是记录一下,好久没有写上传下载的代码,再次接触,有些生疏了啊


标题:SpringBoot之文件批量上传和下载 作者:海加尔金鹰 地址:https://www.hjljy.cn/articles/2020/02/09/1581242261073.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • DUBBO2.7.x版本使用Nacos作为注册中心

    之前已经学习了 Spring boot + DUBBO2.7.4 +zookeeper 的整合: springboot 整合 dubbo2.7.x 版本 在注...

    海加尔金鹰
  • Springboot之swagger-bootstrap-ui(knife4j)

    最近在网上看到一个比较好的swagger-ui,swagger自带的UI不是很友好。特此记录下整合过程,并梳理下swagger相关的知识

    海加尔金鹰
  • 设计模式学习笔记之建造者模式

    这是一篇学习笔记,内容很多是来源于网上的资料,然后按照自己学习情况进行的总结。 我的个人博客:海加尔金鹰

    海加尔金鹰
  • Sublime Text 3配置C++编译运行

    linux(Ubuntu16.04)下的配置,编译后用终端运行,解决了不能输入的问题

    饶文津
  • JavaWeb_常用功能_01_文件上传

     一个功能完善的JavaWeb应用,必不可少的一个功能就是文件的上传。无论是用户的头像等,还是用户需要上传的一系列资料,都是通过文件的上传功能实现的。

    shirayner
  • PHP如何上传文件和下载,你学会了吗?

    ​ 在 B/S 程序中文件上传已经成为一个常用功能。其目的是客户可以通过浏览器(Browser)将文件上传到服务器(Server)上的指定目录。

    叫我可儿呀
  • 为基于 xulrunner 的内嵌 Gecko 程序启用 Profile

    Mozilla 自带的 Profile 支持实际上是非常给力的,看看 %appdata%/Mozilla/Firefox 下的文件就能知道,这里存放着许多的信息...

    mzlogin
  • H5图片压缩与上传

    现在手机用户拍照照片都十分巨大,1m-10m,而普通用户的上传带宽大概为100kb/s-1m/s,导致上传图片十分缓慢

    仙士可
  • 简单粗暴的文件上传漏洞

    文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接。但是想真正把这个漏洞利用好却不那么容易,其中有很多技巧,也有很多需要掌握的...

    信安之路
  • 文件上传那些事儿

    最近把产品目前使用的FileUploader从老的组件库分离出来的,自己也查阅了相关的各种资料,对文件上传的这些事有了更进一步的了解。

    谭伟华

扫码关注云+社区

领取腾讯云代金券