昨天,根据需求文档的要求,自己要做一个关于文件下载的功能,从学校毕业已经很久了,自己好长时间都没有做过这个了,于是自己上网百度,最终开发出来的代码如下:
哦!对了,我先说一下我的思路,首先需要获取服务器上文件存储的路径,然后将文件下载到本地。自己是先查询表中的文件的路径。
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属性的内容