`

从FTP上下载文件并打成ZIP包给用户下载

阅读更多
  //从FTP上下载文件并打成ZIP包给用户下载   
  FTPClient ftpClient = null;   
        ZipOutputStream zipOut = null;   
  
        try {   
            // 创建ftp连接对象   
            ftpClient = new FTPClient();   
            ftpClient.connect(FtpContants.FTP_IP, FtpContants.FTP_PORT);   
            // 登陆ftp服务器   
            ftpClient.login(FtpContants.FTP_USERNAME, FtpContants.FTP_PWD);   
            // 设置文件的传输类型,默认是ASCII,修改为二进制   
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);   
            // printWorkingDirectory是用户的工作目录   
            String basePath = ftpClient.printWorkingDirectory() + "/download/data";   
            // 切换到指定目录中,如果切换失败说明目录不存在   
            boolean boo = ftpClient.changeWorkingDirectory(basePath);   
            // 如果切换路径失败,说明拼接的路径有问题,抛出异常   
            if (!boo) {   
                LogUtil.printErrorLog("the directory does not exist ,"  
                        + "or the user don't hava the enterence to this directory " + basePath);   
                return;   
            }   
  
            // 这个方法的意思就是每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据   
            ftpClient.enterLocalPassiveMode();   
            // 遍历路径下的所有文件   
            FTPFile[] fileList = ftpClient.listFiles();   
  
            response.reset();   
            // 设置导出文件头   
            response.setContentType("application/octet-stream");   
            response.setHeader("Content-Disposition",   
                    "attachment;filename=" + new String(zipFileName.getBytes(LANGUE_GBK), LANGUE_ISO));   
            // 定义Zip输出流   
            zipOut = new ZipOutputStream(response.getOutputStream());   
  
            byte[] byteReader = new byte[BYTE_INIT_SIZE];   
            ByteArrayOutputStream os = null;   
            for (FTPFile tempFile : fileList) {   
                if (tempFile.isFile()) {   
                    os = new ByteArrayOutputStream();   
                    String downFileName = new String(tempFile.getName().getBytes(LANGUE_GBK), LANGUE_ISO);   
                    // 从FTP上下载downFileName该文件把该文件转化为字节数组的输出流   
                    ftpClient.retrieveFile(downFileName, os);   
                    byte[] bytes = os.toByteArray();   
                    InputStream ins = new ByteArrayInputStream(bytes);   
  
                    int len;   
                    zipOut.putNextEntry(new ZipEntry(tempFile.getName()));   
                    // 读入需要下载的文件的内容,打包到zip文件   
                    while ((len = ins.read(byteReader)) > 0) {   
                        zipOut.write(byteReader, 0, len);   
                    }   
                }   
            }   
            zipOut.flush();   
        } catch (IOException e) {   
            LogUtil.printErrorLog(e.getMessage());     
        } finally {   
            // 关闭ftp连接   
            if (null != ftpClient) {   
                try {   
                    ftpClient.disconnect();   
                } catch (IOException e) {   
                    LogUtil.printErrorLog("close Ftp connection error :" + e.getMessage());   
                }   
            }   
            // 关闭zip文件输出流   
            if (null != zipOut) {   
                try {   
                    zipOut.closeEntry();   
                    zipOut.close();   
                } catch (IOException e) {   
                    LogUtil.printErrorLog("close ZipOutputStream connection error :" + e.getMessage());   
                }   
            }   
        }  

分享到:
评论

相关推荐

    java实现Ftp批量下载文件及解压

    如果需要从FTP服务器的特定目录下载文件,可以使用`changeWorkingDirectory()`方法。 ```java ftp.changeWorkingDirectory("/path/to/directory"); ``` 4. **列出目录中的文件**: 使用`listNames()`或`list...

    java动态导出excel压缩成zip下载的方法

    本文主要介绍了java动态导出excel压缩成zip下载的方法,该方法可以将excel文件压缩成zip格式并下载,具有实用价值。 java动态导出excel压缩成zip下载的原理 java动态导出excel压缩成zip下载的方法主要通过使用java...

    java多线程实现下载图片并压缩

    利用这个工具类,我们可以遍历FTP服务器上的文件目录,并对每个文件执行下载操作。下载操作完成后,我们把图片地址存入一个容器中,为后续的图片压缩流程做好准备。 图片压缩阶段,我们利用java.util.zip包中的类来...

    封面、目录.zip

    综上所述,“封面、目录.zip”是一个包含了项目初步信息的压缩文件,其内部的封面和目录文档为用户提供了一个对整个文档集或项目概览。在IT工作中,理解和熟练运用这样的文件组织方式,能够提高工作效率,便于团队...

    curl_wget.zip

    4. **zip**:zip是一个文件压缩和归档工具,可以将多个文件和目录打包成一个压缩文件,节省存储空间。例如,`zip my_archive file1.txt file2.txt`会创建一个名为my_archive.zip的文件,包含file1.txt和file2.txt。...

    WR720N改USB打印服务器.zip

    1. `WinSCP-5.19.2-Setup.exe`:这是一个Windows平台的FTP/SFTP客户端,用于上传和下载文件到路由器。 2. `putty-64bit-0.76-installer.msi`:PuTTY是一个流行的SSH/Telnet客户端,可用于连接到路由器进行命令行操作...

    文档压缩工具 PowerArchiver 19.00.59 + x64 中文多语免费版.zip

    PowerArchiver 2019 官方中文版是一款相当值得推荐的压缩程序,除了一般压缩与解压缩的功能外,它并可设立密码及分片压缩功能,且支持鼠标右键的快显功能、可立即压缩与解压缩或制成自动解压缩文件、功能比起WinZip...

    apache-jmeter-5.4.zip

    5. **docs**:这个目录包含JMeter的用户手册、API文档等官方文档,帮助用户理解并使用JMeter的各种功能。 6. **printable_docs**:此目录下的文档通常是PDF格式,适合打印成纸质版,便于离线阅读或参考。 7. **lib...

    MyFll Microsoft Visual FoxPro设计的扩展库

    DownFile 从internet上下载文件到本地 DownFileX 线程方式从网上下载一个文件 HttpGetFileSize 读取internet上的文件大小 HttpPostData 向http服务器Post数据 HttpOpen 打开一个Internet句柄 HttpAddParms...

    13990973.zip

    1. **压缩文件格式**:如ZIP,这是一种常见的文件压缩格式,可以将多个文件或文件夹打包成一个更小的文件,便于存储和传输。ZIP文件可以用各种解压缩软件打开,如WinRAR、7-Zip或Windows内置的解压缩功能。 2. **...

    TCPIP详解.zip

    它将大块数据分割成小的数据包(称为IP分组),并为每个分组打上源和目的地址,然后通过网络进行传输。IP分为IPv4和IPv6两个版本,IPv4地址由32位二进制组成,而IPv6则使用128位地址,提供了更大的地址空间。 在TCP...

    vc++ 开发实例源码包

    7:在IE工具栏上加按钮,可以直接拖动连接到按钮上下载. 8:注册采用激活方式. 9:采用Messenger的弹出滑动消息提示框. 10:下载管理,虚拟文件夹. 11:自动ping. 12:连接到搜索引擎. 13:自动报告bug,建议等. 14:宏功能. 15...

    java源码包---java 源码 大量 实例

    ftp文件传输 2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地...

    splitfile.zip

    《基于Qt的大文件分割工具——splitfile.zip解析》 在当今大数据时代,处理大文件成为一项常见的需求。然而,由于网络传输限制或邮件附件大小的约束,大文件往往难以便捷地分享。为解决这一问题,一种名为...

    vc++ 应用源码包_6

    其实暴风影音就是Media Player Classic,暴风影音只是同我一样从Gabest官方下载到了Media Player Classic的源码,不同的是,暴风影音将Media Player Classic改成了自己的名字并加入了许多的解码器,打包成自己的产品,...

    湖北省宜城一中等五校联考2020-2021学年高二下学期期中考试物理试题 Word版含答案.zip

    ZIP是一种常见的文件压缩格式,它能够将多个文件或文件夹打包成一个单一的压缩文件,减少存储空间并方便传输。这种格式广泛应用于网络下载、电子邮件附件以及教育资源的分发。 在本例中,"湖北省宜城一中等五校联考...

    java源码包2

    ftp文件传输 2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地...

    java源码包3

    ftp文件传输 2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地...

    java源码包4

    ftp文件传输 2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地...

Global site tag (gtag.js) - Google Analytics