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

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

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. Java开发笔记(一百四十八)通过JDBC查询数据记录

    前面介绍了通过JDBC如何管理数据库,当时提到Statement专门提供了executeQuery方法用于查询操作,为什么查询操作这么特殊呢?这是因为其它语句跑完一次就了事了,顶多像insert.up ...

  2. Centos7下RabbitMQ的安装与配置

    具体按照步骤以此为准 第一步:安装最新版的erlang依赖 通过github设置版本号:https://github.com/rabbitmq/erlang-rpm vi /etc/yum.repos ...

  3. C++ 定义一个指针类型

    #include <iostream>using namespace std; int main(){ int a= 10;  //定义变量a int * p ; //定义个指针P p = ...

  4. docker-compose up 启动容器服务超时错误:ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.

    问题: 本人正在使用docker运行一个中型的项目,包含40多个微服务及相关的docker.由于docker-compose up 同时启动的服务过多,超过了请求HTTP限制的60s时间仍未全部成功启 ...

  5. 倾斜动画(SkewTransform)

    Silverlight中的倾斜变化动画(SkewTransform)能够实现对象元素的水平.垂直方向的倾斜变化动画效果.我们现实生活中的倾斜变化效果是非常常见的,比如翻书的纸张效果,关门开门的时候门缝 ...

  6. Mycat使用--分库分表和读写分离

    Mycat分库分表读写分离 1. 模拟多数据库节点 2. 配置文件 具体操作参看: https://blog.csdn.net/vbirdbest/article/details/83448757 写 ...

  7. python学习之利用socketserver的文件传输

    使用socketserver进行多用户的文件传输 服务端 class FtpServer(socketserver.BaseRequestHandler): # 继承socketserver.Base ...

  8. Vue父组件向子组件传值以及data和props的区别

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/xukongjing1/article/ ...

  9. jquery实现弹出层完美居中效果

    代码如下: showDiv($("#pop"));function showDiv(obj){ $(obj).show(); center(obj); $(window).scro ...

  10. Leetcode刷题python

    Two Sum 两数==target 方法二更好 题1,对时间复杂度有要求O(n),所以维护一个字典,遍历过的数值放在字典中,直接遍历时候查找字典中有没有出现差,查找字典时间复杂度是O(1),所以O( ...