文档章节

Java文件下载

ZhonG_z
 ZhonG_z
发布于 2016/10/25 13:59
字数 554
阅读 24
收藏 0

Java文件下载的几种方式

public HttpServletResponse download(String path, HttpServletResponse response) {
        try {
            // path是指欲下载的文件的路径。
            File file = new File(path);
            // 取得文件名。
            String filename = file.getName();
            // 取得文件的后缀名。
            String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();

            // 以流的形式下载文件。
            InputStream fis = new BufferedInputStream(new FileInputStream(path));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            // 清空response
            response.reset();
            // 设置response的Header
            response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
            response.addHeader("Content-Length", "" + file.length());
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return response;
    }

    public void downloadLocal(HttpServletResponse response) throws FileNotFoundException {
        // 下载本地文件
        String fileName = "Operator.doc".toString(); // 文件的默认保存名
        // 读到流中
        InputStream inStream = new FileInputStream("c:/Operator.doc");// 文件的存放路径
        // 设置输出的格式
        response.reset();
        response.setContentType("bin");
        response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
        // 循环取出流中的数据
        byte[] b = new byte[100];
        int len;
        try {
            while ((len = inStream.read(b)) > 0)
                response.getOutputStream().write(b, 0, len);
            inStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void downloadNet(HttpServletResponse response) throws MalformedURLException {
        // 下载网络文件
        int bytesum = 0;
        int byteread = 0;

        URL url = new URL("windine.blogdriver.com/logo.gif");

        try {
            URLConnection conn = url.openConnection();
            InputStream inStream = conn.getInputStream();
            FileOutputStream fs = new FileOutputStream("c:/abc.gif");

            byte[] buffer = new byte[1204];
            int length;
            while ((byteread = inStream.read(buffer)) != -1) {
                bytesum += byteread;
                System.out.println(bytesum);
                fs.write(buffer, 0, byteread);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

//支持在线打开文件的一种方式

public void downLoad(String filePath, HttpServletResponse response, boolean isOnLine) throws Exception {
        File f = new File(filePath);
        if (!f.exists()) {
            response.sendError(404, "File not found!");
            return;
        }
        BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
        byte[] buf = new byte[1024];
        int len = 0;

        response.reset(); // 非常重要
        if (isOnLine) { // 在线打开方式
            URL u = new URL("file:///" + filePath);
            response.setContentType(u.openConnection().getContentType());
            response.setHeader("Content-Disposition", "inline; filename=" + f.getName());
            // 文件名应该编码成UTF-8
        } else { // 纯下载方式
            response.setContentType("application/x-msdownload");
            response.setHeader("Content-Disposition", "attachment; filename=" + f.getName());
        }
        OutputStream out = response.getOutputStream();
        while ((len = br.read(buf)) > 0)
            out.write(buf, 0, len);
        br.close();
        out.close();
    }

=================== 以上为转载内容 ====================

自己写的下载本地文件的代码

public void download(String filePath, String fileName, HttpServletResponse response) throws UnsupportedEncodingException {
        //获取网站部署路径(通过ServletContext对象),用于确定下载文件位置,从而实现下载  
        String filepath = new String(filePath.getBytes("ISO-8859-1"),"utf-8").toString();  
        String filename = new String(fileName.getBytes("ISO-8859-1"),"utf-8").toString(); 
        try {  
        	File file = new File(filepath + "/" + filename);  
            FileInputStream in = new FileInputStream(file); 
            ServletOutputStream sos = response.getOutputStream();  
            // 设置输出格式
            response.reset();
            response.setContentType("application/x-download");
            response.setHeader("Content-Disposition", "inline;filename =" + fileName);
            //创建缓冲区  
            byte buffer[] = new byte[1024];  
            int len = 0;  
            // 循环将输入流中的内容读取到缓冲区当中  
            while ((len = in.read(buffer)) > 0) {  
                sos.write(buffer, 0, len);  
            } 
            in.close();  
            sos.close();  
            sos.flush();
        } catch (IOException e) {  
            e.printStackTrace();  
        } 
    } 

 

本文转载自:http://www.cnblogs.com/ungshow/archive/2009/01/12/1374491.html

ZhonG_z
粉丝 0
博文 16
码字总数 3493
作品 0
沈阳
程序员
私信 提问
ubuntu配置jdk,jre同样适用

1、首先去官网http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载最新版的jdk。 看需要,如果只需要配置jre环境也可下载jre即可。(注:我下载的为“jdk-7u60-linux-...

Ieenben
2014/06/26
0
0
linux环境下安装jdk1.8

方法/步骤 第一步:下载Linux环境下的jdk1.8,请去(官网)中下载jdk的安装文件; 由于我的Linux是32位的,因此我下载jdk-8u25-linux-i586.tar.gz文件。 如下图所示: 第二步:新建/usr/java...

太黑_thj
2016/12/09
0
0
ubuntu12.04 64位安装java6

安装JDK1.6.0(下载编译2.3及更高版本,低版本请用jdk1.5) 下载jdk安装文件:jdk-6u45-linux-x64.bin 下载地址:http://yunpan.cn/QUduAGziC6Snw 将下载到的jdk-6u45-linux-x64.bin移动到/...

卡西卡
2013/11/23
0
0
编写你的第一个HelloWorld

写在前面的话 因为Java基础是以后学习框架的基石,因此开个文集首先写写Java基础,本来想直奔基础知识的介绍,但是为了保证知识的完整性,因此从Java安装和运行“hello world”开始(虽然百度...

nanaFighting
2018/06/15
0
0
【XML系列】详解JDOM解析XML

【XML系列】详解JDOM解析XML 一、前言 JDOM是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初,JDOM作为一个开放源代码项目正式开始研发。JDOM是一种解析XML的Java工具包。...

磊神Ray
2011/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

任正非对华为热点问题的回应亮了,终于知道华为为什么能扛过这一次的冲击!

任正非对华为热点问题的回应亮了,终于知道华为为什么能扛过这一次的冲击! 如果你是华为的老板,看到一条传遍网络的“美国封锁华为”、“华为禁令”的消息,你会怎么办? 昨天上午,华为创始...

forespider
40分钟前
1
0
Java HTTP 组件库选型看这篇就够了

最近项目需要使用 Java 重度调用 HTTP API 接口,于是想着封装一个团队公用的 HTTP client lib. 这个库需要支持以下特性: 连接池管理,包括连接创建和超时、空闲连接数控制、每个 host 的连...

Java面经
41分钟前
2
0
nginx 重启

在 nginx.config 配置目录下 输入命令: nginx -s reload 在 nginx 中,如果我修改了一个配置文件,或者新增了一个配置文件。按照群里网友的描述,我需要关闭 nginx,或者重启 nginx,比较麻...

MrBoyce
42分钟前
0
0
Cesium中级5 - Terrain 地形

Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ CesiumJS支持对与水流相关的海洋、湖泊和河流以及全球高分辨率地形进行流式处理和可视化。查看山峰、山谷...

Cesium中文网
54分钟前
0
0
搭建jupyter+nginx服务

Tips:该文章面向Mac和centos用户,如果是Windows用户,请先安装虚拟机。 概述 Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 Jupyter ...

阿dai学长
55分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部