您的当前位置:首页java代码实现文件的下载功能

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

2023-08-24 来源:爱问旅游网
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\//保单号 √

50 tTransferData.setNameAndValue(\"QuestionType\//问题件类型 √

51 tTransferData.setNameAndValue(\"QuestionAttribute\//问题件属性 √ 52 tTransferData.setNameAndValue(\"QuestionReasion\//问题件原因 √ 53 tTransferData.setNameAndValue(\"QuestionSendEmail\//下发邮箱 √ 54 tTransferData.setNameAndValue(\"QuestionDes\//问题件描述 √ 55

56 tTransferData.setNameAndValue(\"QuestionID\ 57 tTransferData.setNameAndValue(\"sendnode\ 58 tTransferData.setNameAndValue(\"sender\

59 tTransferData.setNameAndValue(\"senddate\ 60 tTransferData.setNameAndValue(\"replier\

61 tTransferData.setNameAndValue(\"replycontent\ 62 tTransferData.setNameAndValue(\"replydate\ 63 tTransferData.setNameAndValue(\"state\

64 tTransferData.setNameAndValue(\"FilePath\//问题件附件下载路径 65

66 tTransferData.setNameAndValue(\"Operator\

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\ 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

142 150

注意:如果不加下⾯这两⾏代码的话

out.clear(); //清空缓存的内容

out=pageContext.pushBody(); //更新PageContext的out属性的内容

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

因篇幅问题不能全部显示,请点此查看更多更全内容