• java代码实现文件的下载功能


    昨天,根据需求文档的要求,自己要做一个关于文件下载的功能,从学校毕业已经很久了,自己好长时间都没有做过这个了,于是自己上网百度,最终开发出来的代码如下:

    哦!对了,我先说一下我的思路,首先需要获取服务器上文件存储的路径,然后将文件下载到本地。自己是先查询表中的文件的路径。

    LPEdorAnnex表:(这是自己用到的表-其中用到的字段是AnnexParth)

    下面是自己的代码,自己写在了jsp页面中,因为如果写在java类中,不知怎么搞的不太好实现,当然最主要的原因是因为自己实力不行,也因为当时自己赶时间,没有那么多的事件仔细研究,如果以后有时间的话,自己一定要下来好好看看。

      1 <%--
      2   Created by IntelliJ IDEA.
      3   User: Blame
      4   Date: 2019/8/29
      5   Time: 10:49
      6   To change this template use File | Settings | File Templates.
      7   function:问题件下发
      8 --%>
      9 <%
     10 //程序名称:
     11 // 程序功能:保全-问题件下发
     12 //创建日期:2019/09/09
     13 //创建人  :
     14 //更新记录:  更新人    更新日期     更新原因/内容
     15 %>
     16 <%@ page import="com.sinosoft.utility.TransferData" %>
     17 <%@ page import="com.sinosoft.utility.VData" %>
     18 <%@ page import="com.sinosoft.service.BusinessDelegate" %>
     19 <%@ page import="com.sinosoft.lis.schema.LPPolicyHolderSchema" %>
     20 <%@ page import="com.sinosoft.lis.mgubq.PEdorTypeACUI" %>
     21 <%@ page import="com.sinosoft.utility.CErrors" %>
     22 <%@ page import="org.apache.log4j.Logger" %>
     23 <%@ page import="com.sinosoft.lis.mgubq.BQQuestionFileIssueUI" %>
     24 <%@ page import="java.io.*" %>
     25 <%@ page import="org.apache.jasper.JasperException" %>
     26 <%@page contentType="text/html;charset=utf-8" %>
     27 <%@include file="../common/jsp/UsrCheck.jsp" %>
     28 <%
     29     //输出参数
     30     CErrors tError = null;
     31     String FlagStr = "Fail";
     32     String Content = "";
     33     GlobalInput tGI = new GlobalInput();
     34     tGI = (GlobalInput) session.getAttribute("GI");
     35     TransferData tTransferData=new TransferData();
     36 
     37     //页面有效性判断
     38     if (tGI == null) {
     39         FlagStr = "Fail";
     40         Content = "页面失效,请重新登陆";
     41         Logger.getLogger("BQQuestionFileIssueSave").info("页面失效,请重新登陆");
     42     } else {
     43         // 保存登陆管理员账号
     44         String Operator = tGI.Operator;
     45         // fmtransact 操作符
     46         //获取前台数据
     47         String tOperate = request.getParameter("fmtransact");
     48         //获取页面录入的信息
     49         tTransferData.setNameAndValue("OtherNo", request.getParameter("OtherNo"));//保单号  √
     50         tTransferData.setNameAndValue("QuestionType", request.getParameter("QuestionType"));//问题件类型 √
     51         tTransferData.setNameAndValue("QuestionAttribute", request.getParameter("QuestionAttribute"));//问题件属性 √
     52         tTransferData.setNameAndValue("QuestionReasion", request.getParameter("QuestionReason"));//问题件原因 √
     53         tTransferData.setNameAndValue("QuestionSendEmail", request.getParameter("sendemail"));//下发邮箱 √
     54         tTransferData.setNameAndValue("QuestionDes", request.getParameter("QuestionDes"));//问题件描述 √
     55 
     56         tTransferData.setNameAndValue("QuestionID", request.getParameter("QuestionID"));
     57         tTransferData.setNameAndValue("sendnode", request.getParameter("sendnode"));
     58         tTransferData.setNameAndValue("sender", request.getParameter("sender"));
     59         tTransferData.setNameAndValue("senddate", request.getParameter("senddate"));
     60         tTransferData.setNameAndValue("replier", request.getParameter("replier"));
     61         tTransferData.setNameAndValue("replycontent", request.getParameter("replycontent"));
     62         tTransferData.setNameAndValue("replydate", request.getParameter("replydate"));
     63         tTransferData.setNameAndValue("state", request.getParameter("state"));
     64         tTransferData.setNameAndValue("FilePath", request.getParameter("FilePath"));//问题件附件下载路径
     65 
     66         tTransferData.setNameAndValue("Operator",tOperate);
     67         //问题件附件下载
     68         if("downloadQuestion".equals(tOperate)){
     69             try{
     70                 String filePath=request.getParameter("FilePath");
     71 
     72                 //将文件上传至影响服务器,先获取影响服务器配置路径 by zhuting
     73                 String tpath="";
     74                 String tfilename="";
     75                 String sql="";
     76 
     77 
     78                 boolean tFileExists=true;
     79                 System.out.println("要下载的文件名:"+filePath);
     80                 File file = new File(filePath);
     81                 if(!file.exists()){
     82                     tFileExists=false;
     83                 }
     84                 if(tFileExists) {
     85                     InputStream fi = new FileInputStream(file);
     86                     //BufferedOutputStream处理txt格式时多出2行空行
     87                     response.reset();
     88                     response.setContentType("application/x-download");
     89                     response.addHeader("Content-Disposition", "attachment;filename=" + file.getName());
     90 
     91                     OutputStream outOS = response.getOutputStream();
     92                     BufferedOutputStream bos = new BufferedOutputStream(outOS);
     93 
     94                     int start;
     95                     byte[] bt = new byte[4096];
     96                     while ((start = fi.read(bt)) != -1) {
     97                         bos.write(bt, 0, start);
     98                     }
     99 
    100                     bos.flush();
    101                     fi.close();
    102                     bos.close();
    103                     outOS.close();
    104                     out.clear();      //清空缓存的内容
    105                     out=pageContext.pushBody();  //更新PageContext的out属性的内容
    106 
    107 
    108 
    109                 }
    110             }catch (Exception e){
    111 
    112             }
    113 
    114         }
    115         //调用UI类
    116         try {
    117             //准备传输数据VData
    118             VData tVData = new VData();
    119             tVData.add(tTransferData);
    120             tVData.add(tGI);
    121             BusinessDelegate tBusinessDelegate = BusinessDelegate.getBusinessDelegate();
    122             //这样写暂时调用不到UI类,所以先采用直接调用UI类的做法
    123             //    if (!tBusinessDelegate.submitData(tVData, tOperate, "PEdorTypeACUI")) {
    124             BQQuestionFileIssueUI tBQQuestionFileIssueUI = new BQQuestionFileIssueUI();
    125             if (!tBQQuestionFileIssueUI.submitData(tVData, tOperate)) {
    126                 Content = "数据保存失败,原因是:" + tBQQuestionFileIssueUI.getErrors().getError(0).errorMessage;
    127                 FlagStr = "Fail";
    128             } else {
    129                 FlagStr = "Success";
    130                 Content = "处理成功!";
    131             }
    132         } catch (Exception ex) {
    133             ex.printStackTrace();
    134             Content = FlagStr + "处理异常,请联系系统运维人员!";
    135             FlagStr = "Fail";
    136         }
    137 
    138     }
    139 
    140 %>
    141 <html>
    142 <script type="text/JavaScript">
    143     try {
    144         parent.fraInterface.afterSubmit('<%=FlagStr%>', '<%=Content%>');
    145     }
    146     catch (ex) {
    147         <%--alert('<%=tContent%>');--%>
    148     }
    149 </script>
    150 </html>

    注意:如果不加下面这两行代码的话

        out.clear();      //清空缓存的内容
        out=pageContext.pushBody();  //更新PageContext的out属性的内容

    会报getOutputStream() has already been called for this response异常,挺烦人的,但是奇怪的是:文件居然能下载,但是最后就是会在控制台报这种错误,自己百度说是tomcat版本的问题,用linux系统就不会存在这种问题,当然有问题总会是有解决的办法的。加上这两行代码之后,就不会报这种错误了。

     

  • 相关阅读:
    c++3种内存管理方式
    什么是向上兼容和向下兼容?
    回溯法解马的遍历问题
    c++内联函数
    2009年NCRE考试有新变化
    sql server日期时间函数
    Web开发工具大集合
    javascript屏幕高度和宽度等信息代码
    gridview无数据行时显示表头的方法
    IE, FF, Safari前端开发常用调试工具
  • 原文地址:https://www.cnblogs.com/dongyaotou/p/11546724.html
Copyright © 2020-2023  润新知