Java 从服务器下载文件到本地(页面、后台、配置都有)
先来看实现效果:
有一个链接如下:

点击链接下载文件:

第一种方法:Servlet实现
一、HTML页面部分:
1、HTML页面中的一个链接
<a id="downloadTemplate" style="color:blue" onclick="download();">下载导入模板</a>
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,里面如下:
<input type=hidden name="filename" value = "project">
后台可以通过下面代码获得文件名:project
String filename = request.getParameter("filename");
(这段是上面js的翻译,不是正式的哦)
二、配置部分
配置前台页面和后台交互
1、web.xml配置
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/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></load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>downloadServlet</servlet-name>
<url-pattern>*.downloadexcel</url-pattern>
</servlet-mapping>
</web-app>
我这个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)

三、后台部分
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 class DownloadTemplateServlet 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(, 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 = 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");// 定义输出类型
//输入流:本地文件路径
DataInputStream in = new DataInputStream(
new FileInputStream(new File(DOWNLOAD_TEMP_FILE + filename + ".xls")));
//输出流
OutputStream out = resp.getOutputStream();
//输出文件
int bytes = ;
byte[] bufferOut = new byte[];
while ((bytes = in.read(bufferOut)) != -) {
out.write(bufferOut, , bytes);
}
out.close();
in.close();
} catch(Exception e){
e.printStackTrace();
resp.reset();
try {
OutputStreamWriter writer = new OutputStreamWriter(resp.getOutputStream(), "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" style="color:blue" onclick="download();">下载导入模板</a>
//导出模板下载
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 void exportVehicleInfo(HttpServletRequest req, HttpServletResponse resp) {
String filename = req.getParameter("filename");
DataInputStream in = null;
OutputStream out = 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 = new DataInputStream(
new FileInputStream(new File(downloadPath + "test.xls")));
//输出流
out = resp.getOutputStream();
//输出文件
int bytes = ;
byte[] bufferOut = new byte[];
while ((bytes = in.read(bufferOut)) != -) {
out.write(bufferOut, , bytes);
}
} catch(Exception e){
e.printStackTrace();
resp.reset();
try {
OutputStreamWriter writer = new OutputStreamWriter(resp.getOutputStream(), "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();
}
}
}
}
Java 从服务器下载文件到本地(页面、后台、配置都有)的更多相关文章
- 使用xshell从远程服务器下载文件到本地
XSHELL工具上传文件到Linux以及下载文件到本地(Windows) Xshell很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz.首先你的L ...
- 从Linux服务器下载文件到本地命令
从Linux服务器下载文件夹到本地1.使用scp命令 scp /home/work/source.txt work@192.168.0.10:/home/work/ #把本地的source.txt文件 ...
- java 从服务器下载文件并保存到本地
昨天在做一个项目时,用到了从服务器上下载文件并保存到本地的知识,以前也没有接触过,昨天搞了一天,这个小功能实现了,下面就简单的说一下实现过程: 1.基础知识 当我们想要下载网站上的某 ...
- Java实现从服务器下载文件到本地的工具类
话不多说,直接上代码...... import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServlet ...
- 从Linux服务器下载文件到本地
通过安装xshell,连接服务器,通过以下命令可以方便的将服务器的文件下载到本地 #下载一个文件 sz filename #下载多个文件 sz filename1 filename2 #下载dir目录 ...
- 使用scp从远程服务器下载文件到本地
[下载远程文件到本地] scp -P 6008 root@192.168.1.123:/usr/data/1.zip /Users/abc/www [上传本地文件到远程] scp -P 6008 ...
- 使用“rz -be”命令上传文件至服务器;使用“sz 文件名”从服务器下载文件到本地
注意:需要事先安装lrzsz服务 yum install -y lrzsz 因为服务器没有安装sftp服务,无法使用FileZilla.Xftp等连接服务器上传文件,这种情况可以利用rz命令上传文件. ...
- JAVA从服务器下载文件根据Url把多文件打包成ZIP下载
注意: 1. String filename = new String(“xx.zip”.getBytes(“UTF-8”), “ISO8859-1”);包装zip文件名不发生乱码. 2.一定要注意 ...
- python urllib从远程服务器下载文件到本地
#!/usr/bin/env python #-*-coding:utf--*-' #Filename:download_file.py import sys,os import urllib def ...
随机推荐
- Python全栈开发-Day6-面向对象编程
本节内容: 面向过程VS面向对象 面向对象编程介绍 类的语法 构造函数.析构函数 私有方法.私有属性 面向对象的特性:封装.继承.多态 1.面向过程 VS 面向对象 编程范式 编程是程序员用特定的语法 ...
- Redis消息之发布与订阅
"发布/订阅"可以实现进程间的消息传递 发布的消息不会持久化,只能收到订阅后的消息,执行subscribe命令后客户端会进入"订阅"状态,处于此状态下的客户端不 ...
- Go语言学习之5 进阶-排序、链表、二叉树、接口
本节主要内容: 1. 结构体和方法2. 接口 1. 结构体和方法 (1). 用来自定义复杂数据结构 (2). struct里面可以包含多个字段(属性) (3). struct类型可以定 ...
- 书法字帖 PDF转化为可打印PDF
书法类的PDF,因为底色是黑色的,打印起来特别费墨,所以需要转化成白底黑字的文件, 才好打印. 1)用 pdfbox 的 ExtractImages 命令,抽出所有的图片 https://pdfbox ...
- 【转】 strrchr()函数---C语言
转自:https://baike.baidu.com/item/strrchr/4621437?fr=aladdin 函数名称: strrchr 函数原型:char *strrchr(const ...
- Python入门学习指南--内附学习框架
https://blog.csdn.net/weixin_44558127/article/details/86527360
- Using the G711 standard
Using the G711 standard Marc Sweetgall, 28 Jul 2006 4.74 (27 votes) 1 2 ...
- sgu 154
Factorial 题意:能否找到一个数,它的阶乘后面0的个数为n? 数越大,阶乘后的0越多.用二分找.对于一个数x,它的阶乘,将小于等于它的数分解质因数.其中2的个数一定大于5的个数.因此计5的个数 ...
- 如何在VMware系统中的ubuntu16.04中建立与win7系统的共享文件夹
点击虚拟机设置一次得到如图所示 系统默认放在了 /mnt/hgfs文件夹 点击虚拟机安装vmware tools 解压vmware tools压缩包 运行sudo ./vmware-install.p ...
- Linux 环境下 网络IO模型
本文讨论的背景是Linux环境下的network IO. IO发生时涉及的对象和步骤: 对于一个network IO (这里我们以read举例),它会涉及到两个系统对象,一个是调用这个IO的proce ...