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

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

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. C++ 智能指针 boost::scoped_ptr分析

    1.scoped_ptr的实现原理及特性 特性:scoped_ptr和auto_ptr类似,但最大的区别就是不能转让管理权限,也就是说scoped_ptr禁止用户进行拷贝和赋值 实现原理:如何才能禁止 ...

  2. LINGO与EXCEL之间的数据传递

    前言 LINGO 作为非线性规划运算的专用软件,得出结果一般都是纯文本的一列数据,要想将数据呈现到论文当中,需要整理到 EXCEL 中,使用复制粘贴容易出错还费时,所以必须要动用函数来提高效率! 案例 ...

  3. java实现限流

    问题产生,当调用一个接口很频繁的时候,比如每秒调用一个接口100次.业务提现在抢购等.这时我们的服务器处理不过来就会拒绝服务,宕机等等...显然这不是我们需要的. 因此产生了限流这个.限流是什么呢,就 ...

  4. 嵌入式02 STM32 实验08 外部中断

    一.中断 由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理事件的一个程序.该程序执行完成后,CPU接着执行被暂停的程序.这个过程称为中断.(我正在捉泥鳅,但是我妈喊我回家吃饭,我必须回家 ...

  5. C语言 小球撞击反弹

    计算法(略) #include <stdio.h> #include <stdlib.h> int main() { int x, y, a, resu; scanf(&quo ...

  6. python笔记:删除列表元素和根据索引查找元素

    查找元素 #查找元素 >>> member=['张三','李四','王五','张麻子'] >>> member[0] '张三' #交换元素 >>> ...

  7. 一文搞定Flask

    Flask 一 .Flask简介 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收h ...

  8. 【实战经验】--Xilinx--IPcore--PLL生成

    用途: PLL用于产生自己想要的时钟,可以倍频有可以分频,通常倍频. 生成: 1.打开ISE—— Project —— New source,选择IP(CORE Generator & Arc ...

  9. C# IEnumerable接口

    问: 集合很好用,而且非常简单,但是我不明白 为什么数组.ArrayList 和 Hasttable 这些集合都能用foreach直接遍历呢?我想自己定义一个集合类,应该怎么做呢? 回答:这个问题问的 ...

  10. HashMap的内部结构与hash冲突

    HashMap的内部结构 HashMap简介: HashMap继承AbstractMap,AbstractMap实现Map接口 HashMap是线程不同步的,线程不安全的 HashMap可以把null ...