文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JavaWeb项目中怎么实现一个响应式下载功能

2023-05-31 10:34

关注

今天就跟大家聊聊有关JavaWeb项目中怎么实现一个响应式下载功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

主要部分的代码

<a href = "${pageContext.request.contextPath }/user/courseTab">模板下载</a>

当然,现在的项目大家都使用框架,这里我使用的是(SSM),好了,粘代码

@Controller@RequestMapping("/user")public class UploadController {@RequestMapping(value="/courseTab",method=RequestMethod.GET)  public void courseTab(HttpServletResponse response,HttpServletRequest request) throws IOException{    String path = request.getSession().getServletContext().getRealPath("/courseTab/课表上传模板.xls");    DownUtil.downMb(response, path, "课表模板"+DateFormat.formatSimple(new Date()));}}

 这里我使用的DownUtil工具类是我自己写的,下来我粘到文章中

package org.cxxy.base.cxsc.util;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.UnsupportedEncodingException;import javax.servlet.http.HttpServletResponse;public class DownUtil {    @SuppressWarnings("unused")  public static int downFile(HttpServletResponse response, String url,      Integer down, String base, String folderPath) throws IOException {    // 文件的名称    String fileName = url.split("/")[1];    System.out.println(fileName);    // 文件的后缀    String last = url.substring(url.lastIndexOf(".") + 1);    System.out.println(last);    // 文件路径    String downFilePath = base + folderPath + fileName;    Long fileLength = new File(downFilePath).length();// 文件的长度    if (fileLength != 0) {      response.reset();      response.setContentType("application/octet-stream;charset=utf-8"); // 改成输出excel文件      try {        response.setHeader(            "Content-disposition",            "attachment; filename="                + new String(fileName.getBytes("utf-8"),                    "ISO8859-1"));        response.setHeader("Content-Length", String.valueOf(fileLength));      } catch (UnsupportedEncodingException e) {        e.printStackTrace();      }      BufferedInputStream bis = null;      BufferedOutputStream bos = null;      FileInputStream fis = null;      try {        fis = new FileInputStream(downFilePath);        bis = new BufferedInputStream(fis);        // 输出流        bos = new BufferedOutputStream(response.getOutputStream());        byte[] buff = new byte[2048];        int bytesread;        // 写文件        while (-1 != (bytesread = bis.read(buff, 0, buff.length))) {          bos.write(buff, 0, bytesread);        }        // 跳转的路径        fis.close();        bis.close();        bos.close();      } catch (FileNotFoundException e) {        System.out.println("File is Not Exsist!");      }    } else {      // 抛异常      response.getWriter()          .write("<script charset='utf-8' type='text/javascript'>alert('该资源不存在!');history.go(-1);</script>");      return down;    }    down++;    return down;  }    @SuppressWarnings("unused")  public static void downMb(HttpServletResponse response, String path,      String name) throws IOException {    Long fileLength = new File(path).length();// 文件的长度    System.out.println("文件的长度:" + fileLength);    if (fileLength != 0) {      response.reset();      response.setContentType("application/octet-stream;charset=utf-8"); // 改成输出excel文件      try {        response.setHeader(            "Content-disposition",            "attachment; filename="                + new String(name.getBytes("utf-8"),                    "ISO8859-1"));        response.setHeader("Content-Length", String.valueOf(fileLength));      } catch (UnsupportedEncodingException e) {        e.printStackTrace();      }      BufferedInputStream bis = null;      BufferedOutputStream bos = null;      FileInputStream fis = null;      try {        fis = new FileInputStream(path);        bis = new BufferedInputStream(fis);        // 输出流        bos = new BufferedOutputStream(response.getOutputStream());        byte[] buff = new byte[2048];        int bytesread;        // 写文件        while (-1 != (bytesread = bis.read(buff, 0, buff.length))) {          bos.write(buff, 0, bytesread);        }        fis.close();        bis.close();        bos.close();      } catch (FileNotFoundException e) {        System.out.println("File is Not Exsist!");      }    }  }}

 下来,我说一下,调用的downMb,我们都知道,在服务器上下载一个文件,

//设置响应头,控制浏览器下载该文件,形参调的是文件的长度response.setHeader("Content-Length", String.valueOf(fileLength)); //设置响应类型,设置输出流类型response.setContentType("application/octet-stream;charset=utf-8"); // 改成输出excel文件

 这里我使用的是输出的Excel文件

接下来就是读文件,写文件了,相信学了java基础的都会接触IO吧,这里我就略过

BufferedInputStream bis = null;BufferedOutputStream bos = null;

这里使用的是缓冲流,因其使用的是浏览器打开文件的下载

下来就是写文件了,写文件也是一贯的套路,先把文件存到buff数据缓冲区,然后将buff的数据输出到浏览器供用户查看

byte[] buff = new byte[2048];  int bytesread;  // 写文件  while (-1 != (bytesread = bis.read(buff, 0, buff.length))) {    bos.write(buff, 0, bytesread);  }

当读写完文件之后,千万别忘了要关闭文件流(当然,关闭流的顺序也不能变)

fis.close();bis.close();bos.close();

看完上述内容,你们对JavaWeb项目中怎么实现一个响应式下载功能有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯