附件点击即下载的实现

news/2024/10/23 9:37:13/

客户需求:点击附件后不打开附件,而是直接下载

实现思想:将附件读入InputStream,并写入OutputStream返回给Response

实现代码

download.jsp:

<a href="<c:url value="/front/download.do?documentId=${document.id}"/>">${document.name}</a>

downloadController.java:

    @RequestMapping("/download.do")public void download(@RequestParam(value = "documentId",required = true)Long documentId,ModelMap modelMap,HttpServletRequest request ,HttpServletResponse response){//保存数据if(documentId > 0){//取得附件信息List<LmsResourceEntity> lmsResourceList = lmsResourceDao.findById(documentId);for(LmsResourceEntity lmsResource : lmsResourceList){//取得附件在服务器上的路径(D:/Tomcat7/webapp/...)String savePath = request.getSession().getServletContext().getRealPath("/") + lmsResource.getUrl();System.out.println("store path is :" + savePath);//Response编码设为UTF-8response.setContentType("text/html;charset=utf-8");try {request.setCharacterEncoding("UTF-8");} catch (UnsupportedEncodingException e) {throw new RuntimeException("设置错误",e);}BufferedInputStream bis = null;BufferedOutputStream bos = null;try {long fileLength = new File(savePath).length();response.setContentType("application/x-msdownload;");//注意!filename需要转码,否则中文名会显示不了response.setHeader("Content-disposition", "attachment; filename=" + new String( lmsResource.getName().getBytes("gb2312"), "ISO8859-1" ) );response.setHeader("Content-Length", String.valueOf(fileLength));//读取文件bis = new BufferedInputStream(new FileInputStream(savePath));//bos设置为Response的OutputStreambos = new BufferedOutputStream(response.getOutputStream());//将文件写入bosbyte[] buff = new byte[2048];int bytesRead;while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {bos.write(buff, 0, bytesRead);}} catch (Exception e) {e.printStackTrace();} finally {if (bis != null)try {bis.close();} catch (IOException e) {throw new RuntimeException("下载失败",e);}if (bos != null)try {bos.close();} catch (IOException e) {throw new RuntimeException("下载失败",e);}}}}else{System.out.println("文件下载无效documentId");}}



http://www.ppmy.cn/news/193800.html

相关文章

分享5款堪称神器的免费软件,建议先收藏再下载

转眼间新年已经过去一个月了&#xff0c;最近陆陆续续收到好多小伙伴的咨询&#xff0c;这边也是抓紧整理出几个好用的软件&#xff0c;希望可以帮到大家。 1.电脑安全管家——火绒 火绒是一款电脑安全软件&#xff0c;病毒库更新及时&#xff0c;界面清晰干净&#xff0c;没…

网页点击下载文档

h5网页下载链接弹窗 <a href"文件路径" download"文件名称">点击下载</a> 1.下载项目中的文件 如果要下载的是一个excel文件模板&#xff0c;可以先将该文件放在项目文件夹下面&#xff0c;然后在页面下载按钮上加上onclick事件&#xff1a…

点击链接下载

方法一&#xff1a;将链接变成流文件进行下载 window.URL.revokeObjectURL(自己下载的文件链接 例如&#xff1a;https:// XXXX.docx)var xhr new XMLHttpRequest();xhr.open(GET, 自己下载的文件链接 例如&#xff1a;https:// XXXX.docx, true);xhr.responseType blob;xhr…

点击按钮,下载文件

实现文件的下载功能 1、使用a标签 直接下载仅适用于浏览器无法识别的文件。 如果是浏览器支持的文件格式&#xff0c;如html、jpg、png、pdf等&#xff0c;则不会触发文件下载&#xff0c;而是直接被浏览器解析并展示 <ahref"http://xxxxxx.rar"download>下载…

PCL点云处理之分层切片法计算树冠投影面积 (一百七十四)

PCL点云处理之分层切片法计算树冠投影面积 (一百七十四) 一、算法介绍二、方法流程三、具体实验1.代码2.效果四、算法总结一、算法介绍 在上一节中,通过树冠整体投影到同一水平面后,计算凸包面积,粗略估计了树冠投影面积,但在通常的研究学习中,这种方法较为笼统,大部分…

免费售后——公司办公电脑配置单2500到4500档(包含显示器)

为公司需要新配几台电脑&#xff0c;老板出于对我电脑技术的信任&#xff0c;就有我来出配置单。 在网上&#xff08;京东天猫&#xff09;购买配件再由我来组装&#xff0c;其实我是有点担心的&#xff0c;但想到这也是工作职责嘛&#xff0c;而且可以组一台自己适用的新电脑…

操作系统-进程和线程-处理机调度

目录 一、调度的概念 1.1调度的层次 1.1.1高级调度(作业调度) 1.1.2中级调度(内存调度) 1.1.3低级调度(进程调度) 1.2状态模型 1.3调度的时机 1.4调度方式 1.5进程的切换与过程 二、调度算法的评价指标 2.1CPU利用率 2.2吞吐量 2.3周转时间 2.4带权周转时间 2.5等…

购买笔记本电脑的要点品牌篇

购买笔记本电脑的要点品牌篇 笔记本电脑的品牌的特点和等级分类。说到这&#xff0c;觉得可能要得罪人了&#xff0c;在论坛上有很多各大厂商的工作人员、各大品牌的销售人员、对某个品牌情有独钟的人士、还有爱国主义&#xff08;抵制某某品牌的&#xff09;&#xff0c;可真多…