文件下载输出zip文件

文件下载输出成zip文件:

1、前端整个按钮,调js方法:(参数:param,需要下载的id,用逗号拼接)

var param = "?dto.id=";//需要自己拼接param
window.location.href = "<%=basePath%>app/upload/fileAction!uploadFileToZip.do" + param;

2、java关键依赖

 <dependency>
        <groupId>org.apache.ant</groupId>
        <artifactId>ant</artifactId>
        <version>1.9.6</version>
 </dependency>

3、后端代码:

import org.apache.tools.zip.ZipEntry; //zip的关键包
import org.apache.tools.zip.ZipOutputStream;//zip的关键包

@Controller
@RequestMapping("/app/upload")
public class FileAction {

//下载zip文件
 @RequestMapping("fileAction!uploadFileToZip.do")
    public void uploadFileToZip() {
        ParamDTO dto = getDto();//页面参数,可以用自己的方法
        try {
            String[] param = dto.getAsString("id").split(",");//参数
            Map<String, String> m = new HashMap<String, String>();
            String zipName = getNowDate()+ ".zip";//zip名称,我用的是当前日期
            //下载压缩文件代码
            getResponse().reset();
            getResponse().setContentType("application/x-download");
            getResponse().setHeader("Content-Disposition", "attachment;fileName=" + new String(zipName.getBytes("GB2312"), "iso8859-1"));
            ZipOutputStream zipout = new ZipOutputStream(getResponse().getOutputStream());
            UserAccountInfo userAccountInfo = getUserAccountInfo(dto.getUserInfo());// // 获取用户信息,自己定义
            InputStream input = null;
            for (String s : param) {
                m.put("yvk010", s);
                List<Map> fjList = getDao().queryForList("vk01shenhe.queryApplyList_publish_fjxz", m);//查询需要下载的附件list,自己根据需求查询
                if (!ValidateUtil.isEmpty(fjList)) {
                    Object yuf054 = fjList.get(0).get("yuf054");
                    if (!ValidateUtil.isEmpty(yuf054)) {
                        String filename = "未命名";
                        //读文件
                        //input = new ByteArrayInputStream(domains.get(0).getOrig_file());
                        input = UcmUtil.getFile(yuf054.toString(), userAccountInfo);//去文件服务器读取文件流,自己定义
                        byte[] buffer = new byte[input.available()];
                        int len = input.read(buffer);
                        if (len < 0) {
                        }
                        filename = (String) fjList.get(0).get("yuf052");
                        zipout.putNextEntry(new ZipEntry(filename));
                        //设置压缩文件内的字符编码,不然会变成乱码
                        zipout.setEncoding("GBK");
                        zipout.write(buffer);
                    }
                }
            }
            if (input != null) {
                input.close();
            }
            if (zipout != null) {
                zipout.closeEntry();
                zipout.close();
            }
        } catch (Exception e) {

        }
    }

  //生成当前日期方法
  public String getNowDate(){
        LocalDate today = LocalDate.now(); // 获取当前日期
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 定义日期格式
        String formattedDate = today.format(formatter); // 格式化日期
        System.out.println(formattedDate); // 输出格式化后的日期
        return formattedDate;
    }
}

4、效果图:

请添加图片描述

查询数据库,循环查询去服务器查询文件流,这里就不写了,每个公司情况不一样,自己套公式!
如果文件过多,可以自己分批下载,看情况舔砖就行!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值