Java Web实现 使用浏览器从服务器下载文件。

代码实现:

package com.juneyaoair.util;import lombok.SneakyThrows;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
public class FileUtile {/**文件下载并且浏览器导出**/@SneakyThrowspublic static void downloadFile(String file, String fileName, HttpServletResponse response, HttpServletRequest request) {OutputStream out = null;FileInputStream in = null;try {// 1.读取要下载的内容in = new FileInputStream(new File(file));// 2. 告诉浏览器下载的方式以及一些设置// 解决文件名乱码问题,获取浏览器类型,转换对应文件名编码格式,IE要求文件名必须是utf-8, firefo要求是iso-8859-1编码String agent = request.getHeader("user-agent");if (agent.contains("FireFox")) {fileName = new String(file.getBytes("UTF-8"), "iso-8859-1");} else {fileName = URLEncoder.encode(fileName, "UTF-8");}// 设置下载文件的mineType,告诉浏览器下载文件类型String mineType = request.getServletContext().getMimeType(fileName);response.setContentType(mineType);// 设置一个响应头,无论是否被浏览器解析,都下载response.setHeader("Content-disposition", "attachment; filename=" + fileName);// 将要下载的文件内容通过输出流写到浏览器out = response.getOutputStream();int len = 0;byte[] buffer = new byte[1024];while ((len = in.read(buffer)) > 0) {out.write(buffer, 0, len);}deleteFile(file);} catch (IOException e) {e.printStackTrace();} finally {if (out != null) {out.close();}if (in != null) {in.close();}}}/*** 删除单个文件** @param fileName 要删除的文件的文件名* @return 单个文件删除成功返回true,否则返回false*/public static boolean deleteFile(String fileName) {File file = new File(fileName);// 如果文件路径所对应的文件存在,并且是一个文件,则直接删除if (file.exists() && file.isFile()) {if (file.delete()) {System.out.println("删除单个文件" + fileName + "成功!");return true;} else {System.out.println("删除单个文件" + fileName + "失败!");return false;}} else {System.out.println("删除单个文件失败:" + fileName + "不存在!");return false;}}/**检查导出文件**/public String examineExportFile(String title, String[] header, List<FlightActivityVo> list) throws IOException {String pathString = this.getPathString();String pathName = pathString + File.separator + title;log.info("*******************************pathName==================>" + pathName);File file = new File(pathName);FileOutputStream fos = new FileOutputStream(file);OutputStreamWriter osw = new OutputStreamWriter(fos, "GBK");CSVFormat csvFormat = CSVFormat.DEFAULT.withHeader(header);CSVPrinter csvPrinter = new CSVPrinter(osw, csvFormat);for (FlightActivityVo flightActivityVo : list) {csvPrinter.printRecord(flightActivityVo.getOrigination(),flightActivityVo.getDestination(),flightActivityVo.getSegmentDisNumber(), flightActivityVo.getSegmentNumber(), flightActivityVo.getIntegralNumber(), flightActivityVo.getIntegralMax());}csvPrinter.flush();csvPrinter.close();log.info("导出文件创建成功");return pathName;}/**获取文件路径**/public static String getPathString() {String path = PathUtil.getRootPath();File file = new File(path);File parentFile = file.getParentFile().getParentFile().getParentFile();String pathString = "";if (parentFile.toString().startsWith("file:")) {pathString = parentFile.toString().substring(5, parentFile.toString().length());} else {pathString = parentFile.toString();}log.info("*******************************pathString==================>" + pathString);return pathString;}/**文件压缩**/public static String zipCsv(String fileName) {//定义zip压缩包ZipOutputStream zos = null;InputStream fis = null;String pathString = getPathString();String result = "";try {String zipName = "数据导出" + System.currentTimeMillis() + ".zip";zos = new ZipOutputStream(new FileOutputStream(pathString + zipName));        fis = new FileInputStream(new String((pathString + File.separator + fileName).getBytes(StandardCharsets.UTF_8),StandardCharsets.UTF_8));ZipEntry z1 = new ZipEntry(fileName);zos.putNextEntry(z1);byte[] b = new byte[1024];int leng = 0;while ((leng = fis.read(b)) != -1) {zos.write(b, 0, leng);}fis.close();zos.close();} catch (Exception e) {e.printStackTrace();} finally {if (zos != null) {try {zos.close();} catch (IOException e) {e.printStackTrace();}}if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}return zipName;}  }

Java Web实现 使用浏览器从服务器下载文件相关推荐

  1. Java web中不同浏览器间导出Excel文件名称乱码问题解决方案

    Java web中不同浏览器间导出Excel文件名称乱码问题解决方案 参考文章: (1)Java web中不同浏览器间导出Excel文件名称乱码问题解决方案 (2)https://www.cnblog ...

  2. 解决java web中safari浏览器下载后文件中文乱码问题

    解决java web中safari浏览器下载后文件中文乱码问题 参考文章: (1)解决java web中safari浏览器下载后文件中文乱码问题 (2)https://www.cnblogs.com/ ...

  3. CentOS6中连接ftp服务器下载文件时出现了java.net.SocketException: Connection reset

    问题描述:连接CentOS6中的ftp服务器下载文件时出现了java.net.SocketException: Connection reset 解决办法: 1.查看防火墙状态,发现防火墙已开启 se ...

  4. 记一次python后端从web服务器下载文件

    记一次tornado框架python后端从web服务器下载文件过程 date 2020.7.21 Q:暂定的过程 用post方法,先前用的get,传body内文件名. 1.首先获取前端需要下载什么文件 ...

  5. 异步下载文件 java_在浏览器中异步下载文件监听下载进度

    在浏览器中异步下载文件,其实就是把服务器响应的文件先保存在内存中.然后再一次下载到磁盘.第二次下载过程,就是把内存的数据IO到磁盘,没有网络开销.速度极快. 之所以要先保存在内存,主要是可以在下载开始 ...

  6. java web项目的目录结构以及各文件夹的功能是什么eclipse的web目录及各作用

    创建一个javaweb项目的大致目录结构就是这样的,因为是第一次新建,我们的目录只包含了一些基础的文件夹. 然后我们看一下他们的功能是什么. test:项目名称(也可以是其他名称,尽量和自己创建的项目 ...

  7. 如何登陆FTP服务器下载文件

    如何登陆FTP服务器下载文件 在网上我们经常可以看到很多如何搭建FTP服务器的经验,但是却缺少详细的如何登陆FTP服务器的经验,当然对于电脑熟练者来说这可能很简单,但是我想也有相当一部分人不知道如何从 ...

  8. 使用JSP从服务器下载文件的示例

    在此示例中,我们将下载jsp文件.但是您可以下载任何文件.要从服务器下载文件,应指定名为APPLICATION / OCTET-STREAM的内容类型. index.jsp 该文件提供了下载jsp文件 ...

  9. ftp服务器下载文件

    import java.io.*; import java.net.SocketException;import org.apache.commons.net.ftp.*; /*** ftp服务器下载 ...

最新文章

  1. Jackson、FastJson快速入门(整合SpringMVC)
  2. int main( int argc , char *argv[] , char *envp[] )中参数解说
  3. git cherry-pick 把提交到A分支的部分commit 再提交到B分支上
  4. 统计分析与spss的应用第五版数据_#统计分析与SPSS应用# 4.1.3 SPSS频数分析的扩展功能...
  5. python3 socketserver_python3 socketserver
  6. Centos7 系统下搭建.NET Core2.0+Nginx+Supervisor+Mysql环境
  7. 【数字信号处理】相关函数 ( 功率信号 | 功率信号的互相关函数 | 功率信号的自相关函数 )
  8. LeetCode --Search Insert Position
  9. 31. Leetcode 82. 删除排序链表中的重复元素 II (链表-双指针)
  10. Docker 单机网络
  11. Mina代码跟踪(1)
  12. HTML5 拖放、交换位置
  13. 特斯拉2019年第二季度财报出炉:今年有望降低汽车售价
  14. backports移植rtlwifi驱动
  15. 淘宝分类大全及其分组 (MySql, xls)文件,上下关系,拼写,层级,层级树,提示,2022年2月28日数据
  16. 2020届春招实习面经(含阿里、腾讯、网易、京东、华为、美团、快手、字节跳动)
  17. 学计算机独显重要吗,“集显”、“独显”对于普通电脑用户来说还那么重要吗?...
  18. 大点干!早点散----------深入剖析LVS负载均衡群集原理
  19. html火焰字效果,如何用PS制作火焰字特效
  20. android随机抽奖代码_基于JavaScript实现抽奖系统

热门文章

  1. 2017年3月17日华为内推上机考试
  2. 在OCI中为计算实例添加第二块网卡
  3. 解决HA is not enable for this namenode错误
  4. git push 报错Push rejected、 remote unpack failed 、unpacker error、 failed to push some refs to
  5. Axure8.0-制作图片验证码
  6. kali虚拟机如何使用桥接模式连接外网
  7. EasyNVR流媒体直播之:零基础实现摄像头的全平台直播 (一)内网直播的实现
  8. Openjudge上mooc组题目:魔兽世界:备战
  9. 蜘蛛能抓取thinkphp的html页面,搜索引擎的蜘蛛是如何爬的,如何吸引蜘蛛来抓取页面...
  10. AirServer 7.3.0中文版手机设备无线传送电脑屏幕工具