Java Web文件下载
Web文件下载有两种。一种是文件在站点文件夹下。在浏览器中直接输入文件路径就可以下载。如http://www.xxx.com/file.zip。第二种是文件不在站点文件夹下或者文件是动态生成的(导出报表或者导出excel等),这样的情况须要通过response的OutputStream实现文件的下载。
DownloadUtils是一个Java Web文件下载工具类,提供多种静态方法实现文件下载。
package com.rhui.util;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.StringUtils;/*** 文件下载类*/
public class DownloadUtils {/*** 文件下载编码* 该编码告诉浏览器文件名称的编码方式,以防下载中文文件名称时有乱码*/private static String encoding = "utf-8";/*** 文件下载* @param response* @param filePath 文件在server上的路径,包含文件名称*/public static void download(HttpServletResponse response, String filePath){File file = new File(filePath.toString());download(response, file, null, encoding);}/*** 文件下载* @param response* @param filePath 文件在server上的路径。包含文件名称称* @param fileName 文件下载到浏览器的名称。假设不想让浏览器下载的文件名称称和server上的文件名称称一样,请设置该參数*/public static void download(HttpServletResponse response, String filePath, String fileName){File file = new File(filePath.toString());download(response, file, fileName, encoding);}/*** 文件下载* @param response* @param filePath 文件在server上的路径,包含文件名称称* @param fileName 文件下载到浏览器的名称,假设不想让浏览器下载的文件名称称和server上的文件名称称一样,请设置该參数* @param encoding 文件名称称编码*/public static void download(HttpServletResponse response, String filePath, String fileName, String encoding){File file = new File(filePath.toString());download(response, file, fileName, encoding);}/*** 文件下载* @param response* @param file 文件* @param fileName 文件下载到浏览器的名称,假设不想让浏览器下载的文件名称称和server上的文件名称称一样,请设置该參数*/public static void download(HttpServletResponse response, File file) {download(response, file, null, encoding);}/*** 文件下载* @param response* @param file 文件* @param fileName 文件下载到浏览器的名称,假设不想让浏览器下载的文件名称称和server上的文件名称称一样,请设置该參数*/public static void download(HttpServletResponse response, File file, String fileName) {download(response, file, fileName, encoding);}/*** 文件下载* @param response* @param file 文件* @param fileName 文件下载到浏览器的名称,假设不想让浏览器下载的文件名称称和server上的文件名称称一样,请设置该參数* @param encoding 文件名称称编码*/public static void download(HttpServletResponse response, File file, String fileName, String encoding) {if(file == null || !file.exists() || file.isDirectory()){return;}// 假设不指定文件下载到浏览器的名称,则使用文件的默认名称if (StringUtils.isBlank(fileName)) {fileName = file.getName();}try {InputStream is = new FileInputStream(file);download(response, is, fileName, encoding);} catch (IOException e) {e.printStackTrace();}}/*** 文件下载* @param response* @param is 文件输入流* @param fileName 下载的文件名称称* @throws IOException*/public static void download(HttpServletResponse response, InputStream is, String fileName){download(response, is, fileName, encoding);}/*** 文件下载* @param response* @param is 文件输入流* @param fileName 下载的文件名称称* @param encoding 编码格式*/public static void download(HttpServletResponse response, InputStream is, String fileName, String encoding){if(is == null || StringUtils.isBlank(fileName)){return;}BufferedInputStream bis = null;OutputStream os = null;BufferedOutputStream bos = null;try{bis = new BufferedInputStream(is);os = response.getOutputStream();bos = new BufferedOutputStream(os);response.setContentType("application/octet-stream;charset=" + encoding);response.setCharacterEncoding(encoding);response.setHeader("Content-disposition", "attachment;filename="+ URLEncoder.encode(fileName, encoding));byte[] buffer = new byte[1024];int len = bis.read(buffer);while(len != -1){bos.write(buffer, 0, len);len = bis.read(buffer);}bos.flush();}catch(IOException e){e.printStackTrace();}finally{if(bis != null){try{bis.close();}catch(IOException e){}}if(is != null){try{is.close();}catch(IOException e){}}}}public static String getEncoding() {return encoding;}public static void setEncoding(String encoding) {DownloadUtils.encoding = encoding;}
}
假设文件保存在server的非站点文件夹下
String filePath = "c:\\file.zip";
DownloadUtils.download(response, filePath);
假设文件是输入流
// is为文件输入流
// fileName为浏览器下载的文件名
// encoding为文件名编码,预防文件里有中文的时候产生乱码
String fileName = "file.zip";
String encoding = "utf-8";
DownloadUtils.download(response, is, fileName, encoding);
Servlet中文件下载
package com.rhui.web.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.rhui.util.DownloadUtils;@WebServlet("/download/servlet")
public class DownloadServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String filePath = "c:\\file.zip";DownloadUtils.download(response, filePath);}}
Java Web文件下载相关推荐
- java web 文件下载
java通用文件下载 前端:简单的一个标签 <a href="../emp/OriDownload.do?fileName=421785d6-d76c-46a5-86b4-2cfcb9 ...
- Java Web——文件下载getResourceAsStream()返回NULL解决方案
问题描述 严重: Servlet.service() for servlet [club.zstuca.demo.DownloadDemo] in context with path [/DEMOWe ...
- Java Web——文件下载时中文文件名乱码问题解决方案
问题描述 问题分析 浏览器匹配与编码问题. 解决方案 request.setCharacterEncoding("UTF-8");//response.setContentType ...
- Java web文件下载断点续传
一.下载文件请求 @RequestMapping(value = "/file/download")@ResponseBodypublic Res download(HttpSer ...
- centos 安装java web_Centos上安装java web的环境
Centos上安装java web的环境 ,本次例子尽量不用yum形式安装(因为我不知道yum安装怎么指定目录,想把java,tomcat,mysql安装到指定的文件夹下,好管理). (java和to ...
- 初学Java Web(2)——搭建Java Web开发环境
虽然说 html 和 css 等前端技术,是对于 Web 来说不可或缺的技术,但是毕竟更为简单一些,所以就不详细介绍了,没有基础的同学可以去菜鸟教程或者W3school进行自主学习,最好的方式还是做一 ...
- 初学Java Web(4)——Servlet学习总结
经过一段时间的学习,对于Servlet有了新的不一样的见解,在这里做一下总结,将近来学习到的知识总结一下. Servlet 的请求流程 浏览器发出请求:http://localhost:80/xxx1 ...
- 【Java Web】Myeclipse下运用maven管理项目jar包
Java Web开发的人都知道经常会为缺少各种jar包而烦恼,经常要去各种地方下载.用maven来管理项目的jar包,就非常方便了,maven会自动帮你下载所需要的各种jar包. 下面就来介绍一下在M ...
- 使用Hibernate和Spring构建Java Web应用程序
这篇文章将展示如何在Spring环境中使用带有Hibernate ORM的MYSQL DB创建学生注册应用程序. 这是一个简单的应用程序,旨在在注册过程中从用户收集输入详细信息,将这些详细信息保存在M ...
最新文章
- golang mysql多表查询_MySQL多表查询
- 定义zabbix_action报警通知模板
- 内核分析PE获取DLL导出函数地址
- 通用机器学习流程与问题解决架构模板
- kubernetes 中 label的作用_Kubernetes生产环境的16条建议
- 蓝叠 正在检查服务器最新,Windows update一直停留在正在检查更新
- python 网格_Python | 网格到情节
- 罗小黑用flash做的_中影星美好看罗小黑战记正式定档!
- Android Studio(5)---引用jar及so文件
- flask 模板 php,Flask 模板系统
- [leetcode]1185. 一周中的第几天
- 一些Select检索高级用法(适用于mssql)
- 微服务学习之消费模块【Hoxton.SR1版】
- java 权重_java实现权重的简单算法
- 表白神器——Python画丘比特之箭穿心
- 解密微信小程序加密的微信运动数据(java)
- css3 搜索栏 圆角,CSS3 圆角
- python中库是什么意思,python中的库、包、模块和脚本是什么意思
- Eigen: C++开源矩阵计算库
- Win10系统电脑鼠标左键不灵敏、有延迟怎么办
热门文章
- python itertools_itertools
- Android中发现蓝牙设备的广播是,Android 蓝牙设备的查找和连接
- 将csv文件导入python_如何将csv文件导入数据数组?
- java 通用类型_Java获取通用类型的集合
- node mysql 模块 封装_node.js基于工厂方法的mysql模块封装
- mysql 安装导航_ubuntu下安装Mysql
- project facets中没有dynamic_C++强制类型转换操作符 dynamic_cast
- 学习vue3系列watch
- Understand源代码分析工具
- Proxmark3 Easy Gui 4.0 5.0 5.1加强版免费获取啦