首页 > 编程语言 >Java使用FTP下载文件(将流返回给HttpServletResponse)

Java使用FTP下载文件(将流返回给HttpServletResponse)

时间:2022-09-19 15:22:21浏览次数:73  
标签:FTP outputStream Java ftp HttpServletResponse ins fileName null response

1.添加依赖

        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.6</version>
        </dependency>

2.方法

public static void downloadFTPFile(String path,String fileName, HttpServletResponse response){
        FTPClient ftp = new FTPClient();
        InputStream ins = null;
        OutputStream outputStream = null;
   try {
            //设置连接FTP的超时时间
            ftp.setConnectTimeout(1000 * 60);
            //设置ftp字符集
            ftp.setControlEncoding("UTF-8");
            //设置为被动模式
            ftp.enterLocalPassiveMode();
            //登录
            ftp.connect(ip, 21);
            ftp.login(账号, 密码);
            //验证当前登录状态
            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
                ftp.disconnect();
            } else {
                //转移到当前文件上一级目录下
                ftp.changeWorkingDirectory(path);
                FTPFile[] fs = ftp.listFiles();
                for (FTPFile ff : fs) {
                    if (ff.getName().equals(fileName)) {
                        //从服务器读取指定的文件
                        ins = ftp.retrieveFileStream(ff.getName());
                        //主动调用一次getreply,解决再次读取返回null的问题
                        ftp.getReply();
                    }
                }
                //设置返回格式,获取到当前文件的输入流并输出
                response.reset();
                response.setContentType("application/octet-stream");
                response.addHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
                outputStream = response.getOutputStream();
                byte[] b = new byte[1024];
                int len;
                while ((len = ins.read(b)) > 0) {
                    outputStream.write(b, 0, len);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (ins != null) {
                ins.close();
            }
            if (outputStream != null) {
                outputStream.close();
            }
            //退出登录
            ftp.logout();
            //验证是否已连接
            if (ftp.isConnected()) {
                ftp.disconnect();
            }
        }
}

标签:FTP,outputStream,Java,ftp,HttpServletResponse,ins,fileName,null,response
From: https://www.cnblogs.com/hlmy/p/16707780.html

相关文章

  • 女生IT学Java好还是学前端好?
    这个要根据以下几点来分析来判断: 1、公司现状:公司女程序数量凤毛麟角,学Java的就更少了。女生选择前端,以后大概率碰到女前端程序猿,以后有个伴; 2、工资待遇:普遍认为Jav......
  • 计算机毕业设计 SSM+Vue冷冻仓储管理系统 生鲜仓库管理系统 冷冻冷藏仓库管理系统Java
    ......
  • java-stream-内部类
    一、概述按网上的说法,内部类分为4种:1,成员内部类,类似于对象的成员变量;需要通过外部类对象创建;2,静态内部类,类似于类的static变量;直接通过类创建;3,局部内部类,类似于方法(作......
  • 深入浅出 JavaScript 中的 this
    笔者最近在看你不知道的JavaScript上卷,里面关于this的讲解个人觉得非常精彩。JavaScript中的this算是一个核心的概念,有一些同学会对其有点模糊和小恐惧,究其原因,现在......
  • Javascript 字符串
    JavaScript字符串您能够使用单引号或双引号字符串长度内建属性length可返回字符串的长度:vartxt="ABCDEFGHIJKLMNOPQRSTUVWXYZ";varsln=txt.length;特殊......
  • Java 方法
    方法的命名规则1.方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。2.下划线可能出现在JUnit测试方法名称中用......
  • JavaScript作用域
    JavaScript作用域在JavaScript中,对象和函数同样也是变量。在JavaScript中,作用域为可访问变量,对象,函数的集合。JavaScript函数作用域:作用域在函数内修改。......
  • java.io.IOException: 设备未就绪。
    java.io.IOExceptionjava.io.IOException:设备未就绪。 atjava.base/java.io.WinNTFileSystem.canonicalize0(NativeMethod) atjava.base/java.io.WinNTFileSystem.ca......
  • JavaScript基础第四天
    函数函数可以实现代码复用,提高开效率function执行任务的代码块函数声明语法function函数名(){函数体}//例如functionfun(){console.log('hello')}......
  • javascript基础第五天
    对象对象(object):JavaScript的一种数据类型对象的特点:无序的数据的集合可以详细描述某个事物对象的使用let对象名={}//例如letperson={}对象有......