Java从服务器下载⽂件到本地(页⾯、后台、配置都有)先来看实现效果:
有⼀个链接如下:
点击链接下载⽂件:
第⼀种⽅法:Servlet实现
⼀、HTML页⾯部分:
1、HTML页⾯中的⼀个链接
<a id="downloadTemplate" onclick="download();">下载导⼊模板</a>
2、引⼊JS
function download(){
downloadTemplate('downloadExel.downloadexcel', 'filename', 'project');
}
/
**
* ⽤于下载导⼊模板时的影藏form表单的提交,采⽤post⽅式提交
* @param action action映射地址
* @param type parameter的名称
* @param value parameter的值,这⾥为file的filenameinput提交按钮
*/
function downloadTemplate(action, type, value){
var form = ateElement('form');
document.body.appendChild(form);
form.style.display = "none";
form.action = action;
form.id = 'excel';
var newElement = ateElement("input");
newElement.setAttribute("type","hidden");
newElement.name = type;
newElement.value = value;
form.appendChild(newElement);
form.submit();
}
3、解释上⾯JS(不是正是代码)
相当于提交⼀个form,⾥⾯如下:
<input type=hidden name="filename" value = "project">
后台可以通过下⾯代码获得⽂件名:project
String filename = Parameter("filename");
(这段是上⾯js的翻译,不是正式的哦)
配置前台页⾯和后台交互
1、l配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="java.sun/xml/ns/j2ee"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="java.sun/xml/ns/j2ee java.sun/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>downloadServlet</servlet-name>
<servlet-class>
com.zit.rfid.app.prms.business.service.servlet.DownloadTemplateServlet
</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>downloadServlet</servlet-name>
<url-pattern>*.downloadexcel</url-pattern>
</servlet-mapping>
java下载过程
</web-app>
我这个l不是整个⼯程的l,只是⼀个模块的,在你的l加⼊上⾯servlet和servlet-mapping⾥的内容即可
如上:
(1)接受 *.downloadexcel 的Action
(2)HTML的JS⾥的Action,交给st.DownloadTemplateServlet这个类去处理
2、WebContent⽬录下新建file⽂件夹,存放project.xls⽂件(Eclipse的Web⼯程有WebContent,MyEclipse好像是WebRoot)
三、后台部分
1、新建⼀个servlet: 
DownloadTemplateServlet.java
st;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/
**
* @author 022*******
*    主要⽤于下载导⼊模板,页⾯上传⼊的request中parameter中,filename代表了要下载的模板的名称
*/
public class DownloadTemplateServlet extends HttpServlet {
免费好用的第三方/**
private static final long serialVersionUID = -4541729035831587727L;
private final static String HOME_PATH = Resource("/").getPath();
private final static String DOWNLOAD_TEMP_FILE = HOME_PATH.subSequence(0, HOME_PATH.indexOf("WEB-INF")) + "file/";    @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String filename = Parameter("filename");
try{
String resultFileName = filename + System.currentTimeMillis() + ".xls";
resultFileName = de(resultFileName,"UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);// 设定输出⽂件头
resp.setContentType("application/msexcel");// 定义输出类型
//输⼊流:本地⽂件路径
DataInputStream in = new DataInputStream(
new FileInputStream(new File(DOWNLOAD_TEMP_FILE + filename + ".xls")));
//输出流
OutputStream out = OutputStream();
//输出⽂件
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
out.close();
in.close();
} catch(Exception e){
e.printStackTrace();
try {
OutputStreamWriter writer = new OutputStream(), "UTF-8");
String data = "<script language='javascript'>alert(\"\\u64cd\\u4f5c\\u5f02\\u5e38\\uff01\");</script>";
writer.write(data);
writer.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
⼤致步骤:
1. 获取服务器⽂件所在路径
2. 输⼊服务器⽂件
3. 输出⽂件到本地
第⼆种⽅法:SpringMVC实现
这种⽅法⽐较简单
⼀、JSP页⾯部分
<a id="downloadTemplate" onclick="download();">下载导⼊模板</a>
//导出模板下载
function download(){
//后台⽅法、⽂件类型、⽂件名
downloadTemplate('${tPath}/cardIssueVehicleInfo/exportVehicleInfo', 'filename', 'test');    }
/**
* ⽤于下载导⼊模板时的影藏form表单的提交,采⽤post⽅式提交
* @param action 请求后台⽅法
* @param type ⽂件类型
* @param value ⽂件名
*/
function downloadTemplate(action, type, value){
var form = ateElement('form');
document.body.appendChild(form);
form.style.display = "none";
form.action = action;
form.id = 'excel';
程序设计语言的定义是什么
var newElement = ateElement("input");
newElement.setAttribute("type","hidden");
newElement.name = type;
newElement.value = value;
form.appendChild(newElement);
form.submit();
}
⼆、后台部分
@RequestMapping("exportVehicleInfo")
public void exportVehicleInfo(HttpServletRequest req, HttpServletResponse resp) {thrift
String filename = Parameter("filename");
DataInputStream in = null;
OutputStream out = null;
try{
String resultFileName = filename + System.currentTimeMillis() + ".xls";
resultFileName = de(resultFileName,"UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);// 设定输出⽂件头
resp.setContentType("application/msexcel");// 定义输出类型
//输⼊流:本地⽂件路径
in = new DataInputStream(
new FileInputStream(new File(downloadPath + "test.xls")));
//输出流
out = OutputStream();
java split 最后一个分隔符
//输出⽂件
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
} catch(Exception e){
e.printStackTrace();
try {
OutputStreamWriter writer = new OutputStream(), "UTF-8");
String data = "<script language='javascript'>alert(\"\\u64cd\\u4f5c\\u5f02\\u5e38\\uff01\");</script>";
writer.write(data);
writer.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}finally {
if(null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
if(null != out) {
try {
out.close();
} catch (IOException e) {                    e.printStackTrace();                }
}
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。