jsp中从服务端下载文件
来源:互联网 发布:java 获取每个月 编辑:程序博客网 时间:2024/06/06 10:42
最近遇到一个问题,总结一下。
在网页中定义按钮,后台生成文件保存至服务器,前台jsp下载文件。
可以在jsp中设置一个下载按钮然后点击下载按钮通过onclick属性跳转另一个jsp,在另一个jsp中加载后台download方法实现文件的下载。
后台action中可以写个方法让 跳转后的jsp调用
/**
* FirstAction中文件下载的方法* @throws Exception
*/
public void downLoad() throws Exception{
//得到要下载的文件
String fileName = "D:/apache-tomcat-8.5.12/webapps/txtResource/123456.txt";
fileName = new String(fileName.getBytes("UTF-8"),"UTF-8");
//处理文件名
// String realname = fileName.substring(fileName.indexOf("_")+1); 该方法是根据服务器上该文件的路径作为名字进行命名,不好。
//为了防止下载文件名字重复又冲突以系统时间命名
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_HHmmss"); //取系统时间,想取什么样式的,在"yyyyMMdd_HHmmss"修改成什么样式的就行
String realname=df.format(new Date())+".xls"; // “+”号后面是你所下载的文件格式。也不能随便写,要和服务器上原文件格式一致。
ServletActionContext.getResponse().setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(realname, "UTF-8"));
//读取要下载的文件,保存到文件输入流
FileInputStream in = new FileInputStream(fileName);
//创建输出流
OutputStream out = ServletActionContext.getResponse().getOutputStream();
//创建缓冲区
byte buffer[] = new byte[1024];
int len = 0;
//循环将输入流中的内容读取到缓冲区当中
while((len=in.read(buffer))>0){
//输出缓冲区的内容到浏览器,实现文件下载
out.write(buffer, 0, len);
}
//关闭文件输入流
in.close();
//关闭输出流
out.close();
}
jsp定义一个按钮:
<input type="button" id="testBtn" value="下载文件" onclick="window.location.href='download.jsp';" />
//注意: 该按钮提交的action为:FirstAction。如果服务器上已存在选择onclick属性最佳选择。如果点击按钮后再创建文件,然后才下载的话,不能使用该方法控制下载操作和文件创建操作哪个先完成。如果是ajax提交。可以在ajax成功返回后里面运行方法window.location.href='xxx.jsp' ;" 来完成跳转。
定义另一个jsp,让该按钮按下的时候跳转。如:download.jsp
以下是download.jsp
<%@page import="com.bo.action.FirstAction"%> //导入action,download方法在该类中为共有方法,以便调用
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%
FirstAction dL = new FirstAction();
dL.downLoad();
out.clear(); //out为downLoad()方法中的流。 要加上以下两行代码,不然会报错getOutputStream() has already been called for this response
out = pageContext.pushBody();
%>
</body>
</html>
- jsp中从服务端下载文件
- jsp 下载 服务端的文件到本地
- jsp 下载 服务端的文件到本地
- jsp 下载 服务端的文件到本地
- Tcp应用实例---3.从服务端下载文件(断点续传)
- 客户端从服务端下载文件的流程分析
- 实习笔记2 java 利用 RMI 从服务端下载文件
- 通过Java WebService接口从服务端下载文件
- 如何从服务端下载的文件保存到SD卡
- java使用Jsch实现从linux服务端下载文件
- Jsp中实现文件下载
- jsp中实现文件下载
- 一个jsp文件实现从数据库中下载任意类型文件
- 服务端客户端文件下载
- jsp上传文件到数据库和从数据库下载文件
- jsp上传文件到数据库和从数据库下载文件
- android客户端从服务器端下载文件,服务端返回文件流(文件不在项目里)
- jsp中一次下载多个文件
- Java byte数组和文件相互转换
- 算法学习之一,排序算法
- Java多线程学习笔记——信号量的使用
- android中的单例模式
- 简单的理解依赖注入
- jsp中从服务端下载文件
- 再谈依赖注入(依赖注入的简单实现)
- DataBinding框架初体验
- 解决Fedora解压文件产生乱码的问题
- PHP的反射机制
- PHP开发知识
- PHP内核研究(内存管理1)
- 设计模式1: 策略模式(Strategy)
- php的<?php ?>标签匹配