java api html 下载文件_Java 从服务器下载文件到本地(页面、后台、配置都有)...

先来看实现效果:

有一个链接如下:

5e41c9be81cc3af5a5797b26923ec6f2.png

点击链接下载文件:

68e1cc013b07d7796169a4eecfd2807a.png

第一种方法:Servlet实现

一、HTML页面部分:

1、HTML页面中的一个链接

下载导入模板

2、引入JS

function download(){

downloadTemplate('downloadExel.downloadexcel', 'filename', 'project');

}/**

* 用于下载导入模板时的影藏form表单的提交,采用post方式提交

* @param action action映射地址

* @param type parameter的名称

* @param value parameter的值,这里为file的filename*/function downloadTemplate(action, type, value){var form = document.createElement('form');

document.body.appendChild(form);

form.style.display= "none";

form.action=action;

form.id= 'excel';

form.method= 'post';var newElement = document.createElement("input");

newElement.setAttribute("type","hidden");

newElement.name=type;

newElement.value=value;

form.appendChild(newElement);

form.submit();

}

3、解释上面JS(不是正是代码)

相当于提交一个form,里面如下:

后台可以通过下面代码获得文件名:project

String filename = request.getParameter("filename");

(这段是上面js的翻译,不是正式的哦)

二、配置部分

配置前台页面和后台交互

1、web.xml配置

downloadServlet

com.zit.rfid.app.prms.business.service.servlet.DownloadTemplateServlet

3

downloadServlet

*.downloadexcel

我这个web.xml不是整个工程的web.xml,只是一个模块的,在你的web.xml加入上面servlet和servlet-mapping里的内容即可

如上:

(1)接受 *.downloadexcel 的Action

(2)HTML的JS里的Action,交给com.test.DownloadTemplateServlet这个类去处理

2、WebContent目录下新建file文件夹,存放project.xls文件   (Eclipse的Web工程有WebContent,MyEclipse好像是WebRoot)

68bea83b5b243927ea309bb7aecdb943.png

三、后台部分

1、新建一个servlet:

DownloadTemplateServlet.java

package com.test;

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.net.URLEncoder;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;/**

* @author 0223000218

* 主要用于下载导入模板,页面上传入的request中parameter中,filename代表了要下载的模板的名称*/

public classDownloadTemplateServlet extends HttpServlet {/**

* serialVersionUID*/

private static final long serialVersionUID = -4541729035831587727L;private final static String HOME_PATH = DownloadTemplateServlet.class.getResource("/").getPath();private final static String DOWNLOAD_TEMP_FILE = HOME_PATH.subSequence(0, HOME_PATH.indexOf("WEB-INF")) + "file/";

@Overrideprotected voiddoGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

doPost(req, resp);

}

@Overrideprotected voiddoPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

String filename= req.getParameter("filename");try{

resp.reset();//清空输出流

String resultFileName= filename + System.currentTimeMillis() + ".xls";

resultFileName= URLEncoder.encode(resultFileName,"UTF-8");

resp.setCharacterEncoding("UTF-8");

resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);//设定输出文件头

resp.setContentType("application/msexcel");//定义输出类型

//输入流:本地文件路径

DataInputStreamin = newDataInputStream(new FileInputStream(new File(DOWNLOAD_TEMP_FILE + filename + ".xls")));

//输出流

OutputStreamout =resp.getOutputStream();

//输出文件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();

resp.reset();try{

OutputStreamWriter writer= new OutputStreamWriter(resp.getOutputStream(), "UTF-8");

String data= "";

writer.write(data);

writer.close();

}catch(IOException e1) {

e1.printStackTrace();

}

}

}

}

大致步骤:

1. 获取服务器文件所在路径

2. 输入服务器文件

3. 输出文件到本地

第二种方法:SpringMVC实现

这种方法比较简单

一、JSP页面部分

和上面一样

下载导入模板

//导出模板下载

function download(){//后台方法、文件类型、文件名

downloadTemplate('${pageContext.request.contextPath}/cardIssueVehicleInfo/exportVehicleInfo', 'filename', 'test');

}/**

* 用于下载导入模板时的影藏form表单的提交,采用post方式提交

* @param action 请求后台方法

* @param type 文件类型

* @param value 文件名*/function downloadTemplate(action, type, value){var form = document.createElement('form');

document.body.appendChild(form);

form.style.display= "none";

form.action=action;

form.id= 'excel';

form.method= 'post';var newElement = document.createElement("input");

newElement.setAttribute("type","hidden");

newElement.name=type;

newElement.value=value;

form.appendChild(newElement);

form.submit();

}

二、后台部分

@RequestMapping("exportVehicleInfo")public voidexportVehicleInfo(HttpServletRequest req, HttpServletResponse resp) {

String filename= req.getParameter("filename");

DataInputStreamin = null;

OutputStreamout = null;try{

resp.reset();//清空输出流

String resultFileName= filename + System.currentTimeMillis() + ".xls";

resultFileName= URLEncoder.encode(resultFileName,"UTF-8");

resp.setCharacterEncoding("UTF-8");

resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);//设定输出文件头

resp.setContentType("application/msexcel");//定义输出类型//输入流:本地文件路径

in = newDataInputStream(new FileInputStream(new File(downloadPath + "test.xls")));//输出流

out =resp.getOutputStream();//输出文件

int bytes = 0;byte[] bufferOut = new byte[1024];while ((bytes = in.read(bufferOut)) != -1) {out.write(bufferOut, 0, bytes);

}

}catch(Exception e){

e.printStackTrace();

resp.reset();try{

OutputStreamWriter writer= new OutputStreamWriter(resp.getOutputStream(), "UTF-8");

String data= "";

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();

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值