• java下载zip文件


    java下载zip文件

    1.参考API可见,Java的JDK中提供一个java.util.zip的接口。其压缩过程主要是通过这两个接口压缩文件或者文件夹;

    1. java.util.zip.ZipEntry;
    2. java.util.zip.ZipOutputStream;

    2.功能实现

    1)页面请求方式:

     window.location.href = "/file/do_upload;

    2) web端实现

    1. @RequestMapping("/do_upload")
    2. public void test(HttpServletResponse response, String taskId) throws IOException {
    3. long start = System.currentTimeMillis();
    4. // 获取附件信息
    5. List<File> files = fileService.listAllFiles(fileId);
    6. //判断是否为excel类型文件
    7. if(CollectionUtils.isEmpty(files)) {
    8. LOGGER.error("查询无关联图片或者视频");
    9. } else {
    10. // 设置文件名
    11. formatFileName(response, task);
    12. ZipOutputStream zos = null;
    13. try {
    14. zos = new ZipOutputStream(response.getOutputStream());
    15. for (File srcFile : files) {
    16. if (StringUtils.isNotEmpty(srcFile.getFileHbasePath()) && StringUtils.isNotEmpty(srcFile.getFileName())) {
    17. // 下载附件
    18. byte[] bytes = fastDFSService.downloadFile(srcFile.getFileHbasePath());
    19. byte[] buf = new byte[1024];
    20. zos.putNextEntry(new ZipEntry(srcFile.getFileName()));
    21. int len;
    22. ByteArrayInputStream in = new ByteArrayInputStream(bytes);
    23. while ((len = in.read(buf)) != -1){
    24. zos.write(buf, 0, len);
    25. }
    26. zos.closeEntry();
    27. }
    28. }
    29. long end = System.currentTimeMillis();
    30. System.out.println("压缩完成,耗时:" + (end - start) +" ms");
    31. } catch (Exception e) {
    32. throw new RuntimeException("zip error from ZipUtils",e);
    33. }finally{
    34. if(zos != null){
    35. try {
    36. zos.close();
    37. } catch (IOException e) {
    38. e.printStackTrace();
    39. }
    40. }
    41. }
    42. }
    43. }

    设置文件名字和响应信息设置

    1. /**
    2. * @methodname formatFileName
    3. * @Description {设置响应信息和格式化附件名字}
    4. * @author admin
    5. */
    6. private void formatFileName(HttpServletResponse response) throws UnsupportedEncodingException {
    7. String fileName = "附件文字";
    8. Long actualEndTime = new Date().getTime();
    9. fileName += actualEndTime + ".zip";
    10. // 获取浏览器信息
    11. if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
    12. fileName = new String(fileName.getBytes("GB2312"),"ISO-8859-1");
    13. } else {
    14. // 处理中文文件名的问题
    15. fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
    16. fileName = new String(fileName.getBytes("UTF-8"), "GBK");
    17. }
    18. // 清除首部的空白行
    19. response.reset();
    20. // 设置Response容器的编码
    21. response.setCharacterEncoding("UTF-8");
    22. // 不同类型的文件对应不同的MIME类型
    23. response.setContentType("application/x-msdownload");
    24. response.setHeader("Content-Disposition","attachment; filename="+fileName);
    25. }

    参考原文地址:

    获取游览器信息:https://blog.csdn.net/w410589502/article/details/73163383

    压缩文件:https://blog.csdn.net/yunyingxiaoyi/article/details/103407789

    https://blog.csdn.net/wjbltxx/article/details/119938101
  • 相关阅读:
    2017ICPC沈阳赛现场赛 L-Tree (dfs)
    2019西北工业大学程序设计创新实践基地春季选拔赛 D(卢卡斯定理)
    Codeforces Round #454 (Div. 1) CodeForces 906D Power Tower (欧拉降幂)
    模板
    洛谷
    模板
    洛谷
    洛谷
    模板
    模板
  • 原文地址:https://www.cnblogs.com/sunny3158/p/16656288.html
Copyright © 2020-2023  润新知