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

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

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

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

 <%--
Created by IntelliJ IDEA.
User: Blame
Date: 2019/8/29
Time: 10:49
To change this template use File | Settings | File Templates.
function:问题件下发
--%>
<%
//程序名称:
// 程序功能:保全-问题件下发
//创建日期:2019/09/09
//创建人 :
//更新记录: 更新人 更新日期 更新原因/内容
%>
<%@ page import="com.sinosoft.utility.TransferData" %>
<%@ page import="com.sinosoft.utility.VData" %>
<%@ page import="com.sinosoft.service.BusinessDelegate" %>
<%@ page import="com.sinosoft.lis.schema.LPPolicyHolderSchema" %>
<%@ page import="com.sinosoft.lis.mgubq.PEdorTypeACUI" %>
<%@ page import="com.sinosoft.utility.CErrors" %>
<%@ page import="org.apache.log4j.Logger" %>
<%@ page import="com.sinosoft.lis.mgubq.BQQuestionFileIssueUI" %>
<%@ page import="java.io.*" %>
<%@ page import="org.apache.jasper.JasperException" %>
<%@page contentType="text/html;charset=utf-8" %>
<%@include file="../common/jsp/UsrCheck.jsp" %>
<%
//输出参数
CErrors tError = null;
String FlagStr = "Fail";
String Content = "";
GlobalInput tGI = new GlobalInput();
tGI = (GlobalInput) session.getAttribute("GI");
TransferData tTransferData=new TransferData(); //页面有效性判断
if (tGI == null) {
FlagStr = "Fail";
Content = "页面失效,请重新登陆";
Logger.getLogger("BQQuestionFileIssueSave").info("页面失效,请重新登陆");
} else {
// 保存登陆管理员账号
String Operator = tGI.Operator;
// fmtransact 操作符
//获取前台数据
String tOperate = request.getParameter("fmtransact");
//获取页面录入的信息
tTransferData.setNameAndValue("OtherNo", request.getParameter("OtherNo"));//保单号 √
tTransferData.setNameAndValue("QuestionType", request.getParameter("QuestionType"));//问题件类型 √
tTransferData.setNameAndValue("QuestionAttribute", request.getParameter("QuestionAttribute"));//问题件属性 √
tTransferData.setNameAndValue("QuestionReasion", request.getParameter("QuestionReason"));//问题件原因 √
tTransferData.setNameAndValue("QuestionSendEmail", request.getParameter("sendemail"));//下发邮箱 √
tTransferData.setNameAndValue("QuestionDes", request.getParameter("QuestionDes"));//问题件描述 √ tTransferData.setNameAndValue("QuestionID", request.getParameter("QuestionID"));
tTransferData.setNameAndValue("sendnode", request.getParameter("sendnode"));
tTransferData.setNameAndValue("sender", request.getParameter("sender"));
tTransferData.setNameAndValue("senddate", request.getParameter("senddate"));
tTransferData.setNameAndValue("replier", request.getParameter("replier"));
tTransferData.setNameAndValue("replycontent", request.getParameter("replycontent"));
tTransferData.setNameAndValue("replydate", request.getParameter("replydate"));
tTransferData.setNameAndValue("state", request.getParameter("state"));
tTransferData.setNameAndValue("FilePath", request.getParameter("FilePath"));//问题件附件下载路径 tTransferData.setNameAndValue("Operator",tOperate);
//问题件附件下载
if("downloadQuestion".equals(tOperate)){
try{
String filePath=request.getParameter("FilePath"); //将文件上传至影响服务器,先获取影响服务器配置路径 by zhuting
String tpath="";
String tfilename="";
String sql=""; boolean tFileExists=true;
System.out.println("要下载的文件名:"+filePath);
File file = new File(filePath);
if(!file.exists()){
tFileExists=false;
}
if(tFileExists) {
InputStream fi = new FileInputStream(file);
//BufferedOutputStream处理txt格式时多出2行空行
response.reset();
response.setContentType("application/x-download");
response.addHeader("Content-Disposition", "attachment;filename=" + file.getName()); OutputStream outOS = response.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(outOS); int start;
byte[] bt = new byte[4096];
while ((start = fi.read(bt)) != -1) {
bos.write(bt, 0, start);
} bos.flush();
fi.close();
bos.close();
outOS.close();
out.clear(); //清空缓存的内容
out=pageContext.pushBody(); //更新PageContext的out属性的内容 }
}catch (Exception e){ } }
//调用UI类
try {
//准备传输数据VData
VData tVData = new VData();
tVData.add(tTransferData);
tVData.add(tGI);
BusinessDelegate tBusinessDelegate = BusinessDelegate.getBusinessDelegate();
//这样写暂时调用不到UI类,所以先采用直接调用UI类的做法
// if (!tBusinessDelegate.submitData(tVData, tOperate, "PEdorTypeACUI")) {
BQQuestionFileIssueUI tBQQuestionFileIssueUI = new BQQuestionFileIssueUI();
if (!tBQQuestionFileIssueUI.submitData(tVData, tOperate)) {
Content = "数据保存失败,原因是:" + tBQQuestionFileIssueUI.getErrors().getError(0).errorMessage;
FlagStr = "Fail";
} else {
FlagStr = "Success";
Content = "处理成功!";
}
} catch (Exception ex) {
ex.printStackTrace();
Content = FlagStr + "处理异常,请联系系统运维人员!";
FlagStr = "Fail";
} } %>
<html>
<script type="text/JavaScript">
try {
parent.fraInterface.afterSubmit('<%=FlagStr%>', '<%=Content%>');
}
catch (ex) {
<%--alert('<%=tContent%>');--%>
}
</script>
</html>

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

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

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

java代码实现文件的下载功能的更多相关文章

  1. Java代码读取文件

    用Java代码读取文件时,保持文件本来的格式(主要是保持换行),这点有时候比较重要.用代码实现也相当简单. private static void readFile() { StringBuilder ...

  2. C#实现FTP文件夹下载功能【转载】

    网上有很多FTP单个文件下载的方法,前段时间需要用到一个FTP文件夹下载的功能,于是找了下网上的相关资料结合MSDN实现了一段FTP文件夹下载的代码. 实现的思路主要是通过遍历获得文件夹下的所有文件, ...

  3. Java代码实现文件添加数字签名、验证数字签名

    Linux下实现加签.验签 1.使用OpenSSL 生成公钥和密钥: #用 OpenSSL, Linux 上自带,常用命令如下: #生成 RSA 私钥(传统格式的) openssl genrsa -o ...

  4. Java代码实现文件上传(转载)

    刚刚发表了一篇Java发送电子邮件,以前真是没注意,commons里这么多常用项目,惭愧呀,直到现在回顾;要学习的真是太多了,还是缺少真正的学习能力... 这里用到的是commons-fileuplo ...

  5. 阿里 EasyExcel 7 行代码优雅地实现 Excel 文件生成&下载功能

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  6. Java实现FTP上传下载功能

    Java FTP客户端工具包很多,在此我选用的Apache的FTPClient.这个包的获取可以通过http://commons.apache.org/net/来获取,我使用的是最新的commons- ...

  7. Java 多个文件压缩下载

    有时候会有多个附件一起下载的需求,这个时候最好就是打包下载了 首先下面这段代码是正常的单个下载 public void Download(@RequestParam("file_path&q ...

  8. java web服务器文件的下载(有下载弹出匡)

    昨天做了一个文件从服务下载的功能,怎么都不弹出页面,下载框.后查询得知.目前两种方法 1.<a href='下载路径' /> 2.window.location.href = basePa ...

  9. java 实现多文件打包下载

    jsp页面js代码: function downloadAttached(){ var id = []; id.push(infoid); var options = {}; options.acti ...

随机推荐

  1. MariaDB 10.3 序列

    在MariaDB .3版本中sequence是特殊的表,和表使用相同的namespace,因此表和序列的名字不能相同. MariaDB [wuhan]> select version(); +- ...

  2. ETCD服务

    ETCD 简介 ETCD是一个开源的.分布式的键值对数据存储系统,由Go语言实现,用于存储key-value键值对,同时不仅仅是存储,主要用途是提供共享配置及服务发现,使用Raft一致性算法来管理高度 ...

  3. JSON.stringify()序列化的理解及使用

    该函数的作用是:系列化对象 系列化对象说白了就是把对象的类型转换为字符串类型 语法 JSON.stringify(value[, replacer [, space]]) value 将要序列化成 一 ...

  4. 1. Spark GraphX概述

    1.1 什么是Spark GraphX Spark GraphX是一个分布式图处理框架,它是基于Spark平台提供对图计算和图挖掘简洁易用的而丰富的接口,极大的方便了对分布式图处理的需求.那么什么是图 ...

  5. Python-MySQL学习

    内容来源(有删改):https://blog.csdn.net/hzw6991/article/details/87893761 上面链接同步视频地址:https://www.bilibili.com ...

  6. Spark之RDD依赖关系及DAG逻辑视图

    RDD依赖关系为成两种:窄依赖(Narrow Dependency).宽依赖(Shuffle Dependency).窄依赖表示每个父RDD中的Partition最多被子RDD的一个Partition ...

  7. 创建包含CRUD操作的Web API接口4:实现Put方法

    本节教程是前三节的延续,在前面我们创建了Web API和必要的基础设施,也实现了Get和Post方法.接下来,我们将在Web API中实现Put方法. RESTful架构中,HTTP PUT方法用于在 ...

  8. 开启Telnet服务

    在Win7系统中安装和启动Telnet服务非常简单:依次点击“开始”→“控制面板”→“程序”,“在程序和功能”找到并点击“打开或关闭Windows功能”进入Windows 功能设置对话框.找到并勾选“ ...

  9. python3的pip3安装

    ---恢复内容开始--- pip3的安装需要对应一整套python的编译工具库,所以安装好的pip3是这个样子: inear@Ai:~$ pip3 -V pip 18.1 from /usr/lib/ ...

  10. x.append()增加不同维度的区别

    b=np.array([[7,2],[2,4],[3,6],[7,8],[9,10]])print(b)print(type(b)) # 结果显示为nunmpy 数组a=[]for i in rang ...