最近做一个下载文件,下载到指定的目录下面,发现下载后文件只会保存的服务端指定的目录,这就很鸡肋,因此总结一下下载的感想,下面方法可套用于下载任何文件,也可用于下载保存在数据库的文件。

特别注意:前端页面请求不能使用Ajax,可以使用a便签

首先看原先鸡肋的代码:

String path="D:\\javamyWorkSpaceEclipse\\DownLoad\\WebRoot\\images\\1.png";
FileOutputStream fileOutputStream =null;
InputStream fis =null;
try {
            // path是指欲下载的文件的路径。
            File file = new File(path);
            // 取得文件名。
            String filename = file.getName();
            // 取得文件的后缀名。
            String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
            // 以流的形式下载文件。
            fis= new BufferedInputStream(new FileInputStream(path));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            //D:\\download为指定下载到该目录下
            fileOutputStream= new  FileOutputStream("D:\\download\\"+filename);
            fileOutputStream.write(buffer);
            
        } catch (Exception ex) {
            ex.printStackTrace();
        }finally {
        if(fis!=null) {
        fis.close();
        }
        if(fileOutputStream!=null) {
        fileOutputStream.close();
        }

}

正确的下载方式:

String realPath = request.getServletContext().getRealPath("images");
String path=realPath+"\\0803046.V3";
OutputStream toClient =null;
InputStream fis = null;
try {
/* 下面是从需要下载的地方将文件以流的形式读取出来,这里根据不同需求不一样的写法,如果是ftp下载的话这一部分需要另外写,此处只是模拟   */
            // path是指欲下载的文件的路径。
            File file = new File(path);
            // 取得文件名。
            String filename = file.getName();
            // 取得文件的后缀名。
            String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
            // 以流的形式下载文件。
            fis = new BufferedInputStream(new FileInputStream(path));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            /* 下面是将读取出的流放到response的输出流中  */
            // 清空response
            response.reset();
            // 设置response的Header
            response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
            response.addHeader("Content-Length", "" + file.length());
            toClient = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }finally {
        if(fis!=null) {
        fis.close();
        }
        if(toClient!=null) {
        toClient.close();
        }

}

java下载文件总结相关推荐

  1. SpringBoot后台java下载文件及注意的地方

    SpringBoot后台java下载文件及注意的地方 下载效果 后台关键代码 控制类中 @RequestMapping("/file") @ResponseBody public ...

  2. Java下载文件时文件名出现乱码(但文件内容正常)

    今天写文件下载时,发现以前忽略的问题,写个小记录 我们一般使用中文操作系统,所以要求的 文件名编码最好是utf-8,国际化一点 但是,似乎实际上不是这样 1. String fileName=new ...

  3. java文件损坏_用java下载文件 - 文件损坏

    这里是我的code.i写这个下载MP3苍蝇,视频文件&图像. 我用FileOutputStream中处理文件.. 的所有文件都下载好.. MP3文件working..but图像和视频被破坏用j ...

  4. Java下载文件记事本打开不换行问题

    Java下载文件记事本打开不换行问题,其他编辑器可以换行: 原因是下载的内容用的是\n,而win记事本是用的\r\n java 将\n转换为\r\n String script = editText. ...

  5. java 下载文件内容为空_java 下载文件 内容为空。

    Java日志使用slf4j 配置log4j后,有日志文件 但日志文件内容为空 SLF4J的全称是Simple Logging Facade for Java,即简单日志门面. SLF4J并不是具体的日 ...

  6. java下载文件以及预览

    java下载文件以及预览 1.代码如下 /*** 不需要返回HttpServletResponse,会报错* @param response*/@GetMapping("/downloadF ...

  7. java线程下载文件_使用多线程在Java下载文件

    我正在做一个类似IDM的下载器,我已经读到了这篇关于它的文章.我已经实现了我的第一步代码. 下面是Downloader类的代码:package download.manager; import jav ...

  8. Java下载文件时文件名中的中文变成下划线,其他正常

    问题: 问题源码 package com.lm.cms2.controller;import org.springframework.stereotype.Controller; import org ...

  9. ie11 java 下载文件_Javaweb实现上传下载文件的多种方法

    在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为commons-f ...

  10. JAVA下载文件的几_详解Java文件下载的几种实现方式

    Java文件下载的几种方式,具体如下: public HttpServletResponse download(String path, HttpServletResponse response) { ...

最新文章

  1. MySQL编码引发的两个问题
  2. 面试 10+公司,囊获 8 个Offer,面经全公开
  3. Python中的retry
  4. MATLAB对函数做评估
  5. JAVA实现SFTP实例(JSCH)
  6. python调用所有函数_python 调用函数
  7. Lazarus 日志工具 MultiLog
  8. “fatal error C1010”错误解决的三种方法
  9. Apache(阿帕奇) 配置环境及使用(保姆级教程)拒绝繁琐
  10. 短信API接口比较常见的回调状态
  11. ubuntu 12.04下Trackpoint 小红点灵敏度和速度调整
  12. 正高、正常高、大地高
  13. Slurm的前处理prolog和后处理epilog
  14. const T vs. T const by Dan Saks
  15. php微信公众号消息推送
  16. 输入法自定义短语笔记/md常用配置/搜狗输入法自定义词库推荐
  17. Mongodb入门(CRUD与安装)
  18. 恶意软件分析实战02-分析3个恶意程序
  19. android局域网播放视频播放器,手机播放器播放局域网内电脑本地的视频
  20. 解决方案:java.lang.IllegalArgumentException: 为此cookie指定的域[localhost:xxxx]无效

热门文章

  1. 算法导论:快速找出无序数组中第k小的数
  2. 记一次 DISTINCT 导致的 SQL 效率问题
  3. 1、Doherty放大器之宽带拓展理论
  4. Cola公司的雇员分为以下若干类:(知识点:多态) 4.1 ColaEmployee :这是所有员工总的父类,属性:员工的姓名,员工 的生日月份。方法:getSalary(int month) 根据
  5. rails 安装 ‘mysql2’ gem时的报错和解决方案
  6. 层次聚类(Hierarchical Clustering)——CURE算法详解及举例
  7. CCF NOI1010. 邮寄包裹 (C++)
  8. oracle统计学生成绩c,sql - 关于学习成绩统计
  9. Java(运用ArrayList集合)实现学生系统搜索学生信息功能
  10. 网易云课堂html笔记