首页 > 其他分享 >【转】下载文件方式

【转】下载文件方式

时间:2024-12-30 22:43:23浏览次数:5  
标签:文件 String 方式 len filename new byte response 下载

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

 


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

 

标签:文件,String,方式,len,filename,new,byte,response,下载
From: https://www.cnblogs.com/pengweiqiang/p/18642627

相关文章

  • 线程的创建有哪些方式?各有什么特点?
    继承Thread类:简单易用,但灵活性差。实现Runnable接口:灵活性高,适合资源共享。使用Callable接口配合FutureTask:支持返回结果和异常处理,适合需要任务结果的场景。使用线程池:高效管理线程资源,适合处理大量短生命周期任务。使用CompletableFuture:底层依然依赖于线程池。支持......
  • utools团队版 文件共享 使用SFTP
    utools团队版文件共享使用服务器需要先配置服务器在KaliLinux上配置SFTP服务器,可以使用ssh服务来提供SFTP功能。以下是配置步骤:安装openssh-server:sudoapt-updatesudoapt-getinstallopenssh-server启动SSH服务:sudosystemctlstartssh确认SSH服务正在运行:sudos......
  • ECharts仪表盘-进度仪表盘,附视频讲解与代码下载
    引言: ECharts仪表盘(GaugeChart)是一种类似于速度表的数据可视化图表类型,用于展示单个或多个变量的指标和状态,特别适用于展示指标的实时变化和状态。本文将详细介绍如何使用ECharts库实现一个仪表盘,包括图表效果预览、视频讲解及代码下载,让你轻松掌握这一技能。一、图表效果......
  • iphone无法下载Charles证书如何解决抓包问题
    问题:iPhone连上代理以后,浏览器中输入chls.pro/ssl,无法下载。可以访问其他页面解决方法:1)在Charles--help--SaveCharlesRootCertificate,保寸.cer格式文件2)下载证书charles-ssl-proxying-certificate.cer3)Mac电脑与iPhone之间可以通过隔空传送,iphone手机接受文件以后,可以在......
  • 实验7 文件应用编程
    4.实验任务4:文件简单应用#include<stdio.h>intmain(){FILE*fp;charch;intline=0,num=0;fp=fopen("C:\\Users\\ASUS\\Desktop\\data4.txt","r");if(!fp){printf("fail");r......
  • javascript promise同步化的三种方式。
    当async方法执行到await时,后面的代码就会整体被安排进一个新的微任务,此后的函数体变为异步执行。MDNasync:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/await第一种:Promise队列串行letlist=[];lettaskQueue=[];//异步任务队......
  • 实验7 文件应用编程
    实验四:#include<stdio.h>#defineN100intmain(){intm=0,i,num=0;chara[N];FILE*fp;fp=fopen("data4.txt","r");if(!fp){printf("failedtoopen...");return;}while(......
  • bat批量修改文件名称
    文章目录一、目标二、主要思路三、步骤(一)进入目标文件夹(二)获取所有目标文件名称1、创建文本文档(txt格式)2、写代码3、生成bat文件4、执行bat文件,获取原文件名列表:(三)修改成目标文件名,并拼接成下一步待执行的bat命令1、B列做辅助列,得到新的我们想要改成的目标文件名2、C列做辅助列,得......
  • h5播放 加密m3u8文件
    h5播放加密m3u8文件1.opensslrand16>enc.key 2. opensslrand16-hex #获取字符串,key_info.txt文件用3.新建文件:key_info.txt http://127.0.0.1:8080/enc.keyenc.keyd7e6e8dc49a8eddc07ee028643a7a693启动web目录python3-mhttp.server8080   生成文......
  • 电脑中缺失的nvrtc64_90.dll文件如何修复?
    一、文件丢失问题案例:nvrtc64_90.dll文件缺失问题分析:nvrtc64_90.dll是NVIDIACUDARuntimeCompilation库的一部分,通常与NVIDIA的CUDAToolkit或相关驱动程序一起安装。如果该文件丢失,可能会导致基于CUDA的应用程序(包括某些游戏)无法正常运行。解决方案:重新安装CUDATo......