java 下载文件

java 下载文件阅读原文1.以流的方式下载.publicHttpServletResponsedownload(Stringpath,HttpServletResponseresponse){try

大家好,又见面了,我是你们的朋友全栈君。

阅读原文

1.以流的方式下载.

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-Disposition", "attachment;filename=" +URLEncoder.encode(file.getName(),"utf-8"));

            response.addHeader("Content-Length", "" + file.length());
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            toClient.write(buffer);
            toClient.flush();
            toClient.close();






 /*response.setCharacterEncoding("utf-8");
            response.setContentType("multipart/form-data");
            response.setHeader("Content-Disposition",
                    "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, path));
            FileUtils.writeBytes(path, response.getOutputStream());*/





            /*File file = new File(path);
            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(),"utf-8"));
            response.setContentType("application/octet-stream; charset=UTF-8");
            FileUtils.setAttachmentResponseHeader(response, URLEncoder.encode(file.getName(),"utf-8"));
            FileUtils.writeBytes(path, response.getOutputStream());
*/





        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return response;
    }

2.下载本地文件


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();
        }
    }


3.下载网络文件

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();
        }
    }


4.支持在线打开的方式

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();
    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/154241.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 关于转置卷积(反卷积)的理解[通俗易懂]

    关于转置卷积(反卷积)的理解[通俗易懂]本文地址:https://blog.csdn.net/isMarvellous/article/details/80087705,转载请注明出处。什么是转置卷积(反卷积)?转置卷积(TransposedConvolution)又称为反卷积(Deconvolution)。在PyTorch中可以使用torch.nn.ConvTranspose2d()来调用,在Caffe中也有对应的层deco…

  • pycharm连接mysql数据库代码_myeclipse连接数据库

    pycharm连接mysql数据库代码_myeclipse连接数据库PyCharm是一款常用的Python开发的软件,这里给大家介绍一下如何在PyCharm如何连接MySQL数据库。首先,我们需要找到页面中的DataBase窗口,一般在页面的右侧,没有显示的话,可以点击View->ToolWindows->DataBase。然后显示DataBase之后,我们点击DataBase。然后我们点击DataBase的这个+号。然后选择DataSource->MySQL。然后就显示到连接的页面,如果是第一次连接的时候,就需要点击下面的D

  • JavaIO流详解

    【I/O流】Input/Output:输入输出机制输入机制:允许java程序获取外部设备的数据(磁盘,光盘,网络等)。输出机制:保留java程序中的数据,输出到外部设备上(磁盘,光盘等)。【可以看出,IO的入出是以java程序为第一人称的】IO各种之间的关系先看张图:流的分类:通过不同的方法,可以对于进行分类。1.按照功能来划分:输入流:只能从中读取数

  • 使用war包部署在Tomcat中运行

    使用war包部署在Tomcat中运行准备工具,Tomcat,eclipse 1选择你要导出的war包,选择你要的项目然后按照我圈起来的去操作 2,然后找到Web包,web下面还有一个WAR.file点击进去,找不到就在上面可以搜索的 3 第一个是你导出去的war包名称,第二个是你war包路径 4 这里我是导入在E盘中的 5把这个war包复制,然后去找你Tomcat的安…

  • 最大公约数和最小公倍数的关系

    最大公约数和最小公倍数的关系联系:最大公约数:指两个或多个整数共有的约数中最大的那个最小公倍数:指两个或多个整数共有的倍数中最小的那个以两个整数为例:最大公约数表示为:(a,b)最小公倍数表示为:[a,b]定理:(a,b)X[a,b]=ab(a,b均为整数)例题:#include<stdio.h>intmain(){ intm,n,min=0,max=0; scanf(“%d%d”,&m,&n); //求最大公约数 for(inti

  • 怎样利用App打造自明星实现自盈利

    怎样利用App打造自明星实现自盈利

    2021年11月15日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号