/*

* 另存为

*/

@RequestMapping("/saveAs.do")

public @ResponseBody

void saveAs(String filePath, String fileName) {

try {

File file = new File(filePath);

// 设置文件MIME类型

getResponse().setContentType(getMIMEType(file));

// 设置Content-Disposition

getResponse().setHeader(

"Content-Disposition",

"attachment;filename="

+ URLEncoder.encode(fileName, "UTF-8"));

// 获取目标文件的绝对路径

String fullFileName = getRealPath("/upload/" + filePath);

// System.out.println(fullFileName);

// 读取文件

InputStream ins = new FileInputStream(fullFileName);

// 放到缓冲流里面

BufferedInputStream bins = new BufferedInputStream(ins);

// 获取文件输出IO流

// 读取目标文件,通过response将目标文件写到客户端

OutputStream outs = getResponse().getOutputStream();

BufferedOutputStream bouts = new BufferedOutputStream(outs);

// 写文件

int bytesRead = 0;

byte[] buffer = new byte[8192];

// 开始向网络传输文件流

while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {

bouts.write(buffer, 0, bytesRead);

}

bouts.flush();// 这里一定要调用flush()方法

ins.close();

bins.close();

outs.close();

bouts.close();

} catch (Exception e) {

e.printStackTrace();

}

}

/*

* 批量下载另存为

*/

@RequestMapping("/batDownload.do")

public @ResponseBody

void batDownload(String filePaths, String fileNames) {

String tmpFileName = "work.zip";

byte[] buffer = new byte[1024];

String strZipPath = getRealPath("/upload/work/"+tmpFileName);

try {

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(

strZipPath));

String[] files=filePaths.split("\\|",-1);

String[] names=fileNames.split("\\|",-1);

// 下载的文件集合

for (int i = 0; i < files.length; i++) {

FileInputStream fis = new FileInputStream(getRealPath("/upload/"+files[i]));

out.putNextEntry(new ZipEntry(names[i]));

//设置压缩文件内的字符编码,不然会变成乱码

out.setEncoding("GBK");

int len;

// 读入需要下载的文件的内容,打包到zip文件

while ((len = fis.read(buffer)) > 0) {

out.write(buffer, 0, len);

}

out.closeEntry();

fis.close();

}

out.close();

saveAs("work/"+tmpFileName, tmpFileName);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 根据文件后缀名获得对应的MIME类型。

*

* @param file

*/

private String getMIMEType(File file) {

String type = "*/*";

String fName = file.getName();

// 获取后缀名前的分隔符"."在fName中的位置。

int dotIndex = fName.lastIndexOf(".");

if (dotIndex < 0) {

return type;

}

/* 获取文件的后缀名 */

String end = fName.substring(dotIndex, fName.length()).toLowerCase();

if (end == "")

return type;

// 在MIME和文件类型的匹配表中找到对应的MIME类型。

for (int i = 0; i < MIME_MapTable.length; i++) {

if (end.equals(MIME_MapTable[i][0]))

type = MIME_MapTable[i][1];

}

return type;

}

private final String[][] MIME_MapTable = {

// {后缀名, MIME类型}

{ ".doc", "application/msword" },

{ ".docx",

"application/vnd.openxmlformats-officedocument.wordprocessingml.document" },

{ ".xls", "application/vnd.ms-excel" },

{ ".xlsx",

"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" },

{ ".pdf", "application/pdf" },

{ ".ppt", "application/vnd.ms-powerpoint" },

{ ".pptx",

"application/vnd.openxmlformats-officedocument.presentationml.presentation" },

{ ".txt", "text/plain" }, { ".wps", "application/vnd.ms-works" },

{ "", "*/*" } };

};

/file/batDownload.do"method="post">

function download(){

var objs=$("#fileFrame").contents().find("input[name='ckFile']:checked");

if(objs.length>0){

var filePaths="";

var fileNames="";

for(var i=0;i

filePaths+=$("#fileFrame").contents().find("#path_"+objs[i].value).val()+"|";

fileNames+=$("#fileFrame").contents().find("#a_"+objs[i].value).html()+"|";

}

filePaths=filePaths.substring(0,filePaths.length-1);

fileNames=fileNames.substring(0,fileNames.length-1);

$("#filePaths").val(filePaths);

$("#fileNames").val(fileNames);

$("#batForm").submit();

}else{

alert("请选择需要下载的文件!");

return false;

}

}

DEMO下载地址:https://dwz.cn/Jw3z6fVq

Java 批量文件不打包下载_【Java】Java批量文件打包下载zip相关推荐

  1. java文件客户端下载_使用Java写一个minio的客户端上传下载文件

    标签:color   ati   tty   java   system   wired   format   media   param 前言: 确保已经安装了minio的服务端 代码: pom.x ...

  2. java文件流插入数据库_使用Java流查询数据库

    java文件流插入数据库 在本文中,您将学习如何编写纯Java应用程序,这些应用程序能够处理现有数据库中的数据,而无需编写一行SQL(或类似的语言,例如HQL),而无需花费数小时将所有内容放在一起. ...

  3. java设计是什么软件下载_用Java设计下载软件

    用Java设计下载软件 HTTP 协议的简介 HTTP协议是一种超文本传输协议(Hypertext Transfer Protocol),工作于网络应用层,自1990年起广泛应用于WWW 的全球信息服 ...

  4. java桌宠安装_桌宠软件下载_桌宠软件电脑版下载安装v2.0_全球下载

    <桌宠>是一款桌面养宠物类型的软件,经过简单的设置就可以养一只宠物,你需要的放养桌面上的宠物,你上班的时候,电脑使用软件时间的积累,就能给它喂养饲养,让他快速的成长,这个过程也是十分的有趣 ...

  5. java中文件处理之图片_在Java 7中处理文件

    java中文件处理之图片 以下是The Well-Grounded Java Developer的草稿的修改后的片段. 它使您快速了解与以前版本相比,在Java 7中操作文件要容易得多. 通过使用新的 ...

  6. java 文件追加 变大_用java写在doc中追加内容代码时,为什么它只能写入一次内容,后面都只是增加文件的大小,不增加内容啊?...

    用java写在doc中追加内容代码时,为什么它只能写入一次内容,后面都只是增加文件的大小,不增加内容啊? 答案:1  信息版本:手机版 电脑版 解决时间 2020-07-02 16:34 已解决 20 ...

  7. java获取项目的相对路径_在JAVA文件中获取该项目的相对路径

    1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://ww ...

  8. java web开源项目源码_适合Java新手的开源项目集合——在 GitHub 学编程

    作者:HelloGitHub-老荀 当今互联网份额最大的编程语言是哪一个?是 Java!这两年一直有听说 Java 要不行了.在走下坡路了.没错,Java 的确在走下坡路,未来的事情的确不好说,但是瘦 ...

  9. java excel api及详细教程_针对Java Excel API及详细教程

    时在java开发中会操作excel表格,其实操作起来也特别简单.这里把前期操作步骤说一下,本文会简单的介绍一个开放源码项目:Java Excel Api,使用它大家就可以方便的操作Excel文件了. ...

  10. java utf8 简繁转换 类库_在Java中进行中文繁体简体转换,基于OpenCC(Open Chinese Convert)方案...

    一.OpenCC介绍 OpenCC (Open Chinese Convert,开放中文转换) 是一个用于中文简繁转换的开源项目,支持词汇级别的转换.异体字转换和地区习惯用词转换(中国大陆.台湾.香港 ...

最新文章

  1. 自定义注解-aop实现日志记录
  2. idea在Terminal中使用maven指令
  3. 小熊电器、九阳、苏泊尔们的“颜价比”被外卖小哥“打回原形”
  4. 15数码 java,15数码问题
  5. 160 - 38 CyberBlade.2
  6. 七年级计算机教学质量分析,七年级数学期末教学质量分析报告
  7. 指向函数的指针数组(C++)
  8. 设置不定宽高的元素垂直水平居中
  9. PHP合并2个数字键数组的值
  10. python基础教程doc_python基础教程之Word Cloud (词云) - Python|python基础教程|python入门|python教程...
  11. 计算机相关国内外文献,计算机外文文献
  12. android不能访问数据库文件,android下访问已存在的sqlite数据库文件的办法
  13. 整数拼接,拼成最小整数(暴力穷举)
  14. GitHub各种加速方式
  15. MTM量身定制系统 - 富友ERP产品 - 信息化推动服装行业管理软件升级
  16. T-SQL 基础学习 01
  17. 刷题记录:牛客NC20875舔狗舔到最后一无所有
  18. 军工企业信息化建设周涛_军工企业非密信息化
  19. 值得收藏|40000字 Matplotlib 实操干货
  20. ISO26262如何保证功能安全

热门文章

  1. linux下压缩和解压的命令汇总
  2. rust 手动关闭子线程_从零开始写 OS (9) —— 内核线程
  3. R 语言 download.file 的几点知识
  4. R语言可视化学习笔记之ggridges包
  5. 2020滑铁卢大学计算机科学学费,加拿大大学国际生学费上涨 滑铁卢大学学费上涨62%...
  6. Python使用matplotlib可视化散点图、可视化两个数值变量之间的关系(Scatter plot)
  7. python使用matplotlib可视化线图(line plot)、使用arrow函数在matplotlib可视化图像中添加箭头(drawing arrows in matplotlib)
  8. AttributeError: ‘FPDF‘ object has no attribute ‘unifontsubset‘
  9. R语言日期函数weekdays, months, quarters julian实战(星期几、那个月、那个季度、时间差)
  10. R语言dplyr包coalesce函数处理缺失值(missing value)实战