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

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

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. 长乐国庆集训Day2

    T1 连珠风暴 题目 [题目描述] 给定M种颜色的珠子,每种颜色珠子的个数均不限,将这些珠子做成长度为N的项链. 问能做成多少种不重复的项链.两条项链相同,当且仅当两条项链通过旋转或是翻转后能重合在一 ...

  2. hadoop功能与用途

    1.hadoop是什么? 开源的分布式存储和分布式计算平台. 2.hadoop组成? HDFS:分布式文件存储系统,存储海量数据. Mapreduce:并行处理框架,实现任务分配和调度. 3.hado ...

  3. PV、UV、UIP、VV、DAU、CTR指的是什么?

    PV(page view) 网站浏览量,指网页的浏览次数,用户每打开一次页面就记录一次PV,多次打开则累加. UV(unique vistor) 独立访客数,指的是某一天访问某站点的人数,以cooki ...

  4. 【简解】C2CRNI - Crni

    [题目大意] 给定一个N行N列的矩阵,每个格子要么为白色要么为黑色.黑矩形为所涵单元格数大于等于2且所涵单元格均为黑色的矩表.要解决的问题是在给定的矩形中找出两个没有共公部分的黑矩形,输出所有方案数, ...

  5. SpringCloud整合sleuth,使用zipkin时不显示服务

    转载于:https://www.cnblogs.com/Dandwj/p/11179141.html 原文地址:https://blog.csdn.net/weixin_30416497/articl ...

  6. ServletContextInitializer添加 servlet filter listener

    ServletContextInitializer添加 servlet filter listener https://www.cnblogs.com/pomer-huang/p/9639322.ht ...

  7. win10下jupyter修改默认路径的办法

    查了很多资料,发现都不管用,最后亲测找到一种方法. 实现的方法就是修改快捷方式标签的目标栏,如下图: 后面有一个%USERPROFILE% 将%USERPROFILE%改成你要的路径就可以了 然后应用 ...

  8. 2019-07-22 phpStudy配置虚拟主机

    1.右击 phpStudy ->[打开配置文件]->[vhosts-conf]: 2.在里面加入如下代码,并保存: NameVirtualHost *:80 <VirtualHost ...

  9. Linux Samba服务器的安装

    Samba最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享,也可以用于Linux与Linux之间的资源共享 安装 # yum install samba samba-cli ...

  10. Java部分目录

    一.Java基础 1.访问权限控制 2.重载和覆盖 3.面向对象的特征 4.接口和抽象类 5.Java环境变量配置 6.Java英文缩写详解 7.如何在Maven项目中引入自己的jar包 8.使用ba ...