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

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

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. AntV设置Chart高度

    AntV在使用柱状图时不能单独设置一个柱状图的宽度,但可以设置整体高度,宽度,代码如下 const chart = new F2.Chart({ id: 'c1', // 指定图表容器 ID widt ...

  2. 使用 Redis 的 sorted set 实现用户排行榜

    要求:实现一个用户排行榜,用户数量有很多,排行榜存储的是用户玩游戏的分数,对排行榜的读取压力比较大,如何实现? 思路分析: 实现排行榜,可以考虑使用 Redis 的 zset 结构: 用户数量很多的话 ...

  3. poj1458公共子序列 C语言

    /*Common SubsequenceTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 56416 Accepted: 23516D ...

  4. Java开发笔记(一百五十一)Druid连接池的用法

    C3P0连接池自诞生以来在Java Web领域反响甚好,业已成为hibenate框架推荐的连接池.谁知人红是非多,C3P0在大型应用场合中暴露了越来越多的局限性,包括但不限于下列几点:1.C3P0管理 ...

  5. 51book机票接口对接,吐血整理(含PHP封装代码)

    前言 最近在对接51book的机票接口,遇到了挺多坑,所以整理一份作为记录 机票有两个不同的接口,一个是机票,另一个是保险 一.申请 要接51book的机票,首先是要申请账号,这时候应该是有客户经理跟 ...

  6. stvd使用中的一些问题

    1.stm8_interrupt_vector.c 会莫名其妙的自动出现,而且都是在项目目录下.进行如下操作 2.stvd编译时遇到no default placement for segment . ...

  7. js的splice和delete

    例如有一个数组是 :var textArr = ['a','b','c','d']; 这时我想删除这个数组中的b元素: 方法一:delete 删除数组 delete textArr[1]  结果为: ...

  8. C语言--线性表

    #include<stdio.h>#include<stdlib.h>#include<string.h>#define LIST_SIZE 100#define ...

  9. el-table单元格样式更改

    前几天遇到一个关于el-table表格样式的问题一直没解决 因为在el-table-column加样式并不生效所以更改起来比较麻烦 后来了看来element官方文档和在一些关于此方面的博客,使用了一个 ...

  10. js运算符及数据类型转换(二)

    1.一元运算符+.-[将其它类型转化为number类型,相当于调用了Number()函数]var num = +('hello')  NaN  typeof num->numbernum = + ...