apache FTPClient下载文件问题

xiuyouxu 2015-09-06 04:05:34
我们的一个应用需要使用ftp下载功能。代码中使用apache FTPClient(commons-net-3.3.jar)实现。目前在生产环境中偶尔出现一个问题,使用下面的代码下载到本地的一个zip文件,不是一个完整的zip文件,里面缺少了一些文件。我们的应用和FTP服务端是在同一个局域网中的不同机器上,FTP服务端使用的是apache FTPServer,使用最基本的配置。

下载功能代码如下:

public String download(String localPath, String remotePath) {
FileOutputStream fos = null;
try {
File localFile = new File(localPath);
File parent = localFile.getParentFile();
if (!parent.exists()) {
parent.mkdirs();
} else {
if (localFile.exists()) {
localFile.delete();
}
}
fos = new FileOutputStream(localFile);
client.setBufferSize(1024);
client.setControlEncoding("UTF-8");
client.enterLocalPassiveMode();// 进入被动模式
client.setFileType(FTP.BINARY_FILE_TYPE);// 使用二进制文件文件类型
if (client.retrieveFile(remotePath, fos)) {
return "true";
} else {
logger.error("FTP 下载文件失败!");
}
} catch (IOException e) {
logger.error("FTP 下载文件出错!", e);
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "false";
}

代码中client是在该方法所在的类中另一个方法中初始化的,在执行download方法前,已完成登陆等操作。生产环境中调用该下载文件的方法时,没有抛异常或打印错误日志,该方法正常返回了"true"。

目前还没找到原因,希望对apache FTPClient比较熟悉的同学帮忙看看什么原因,不知道是不是和网络情况有关。谢谢!
...全文
271 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
DY1201 2015-09-10
  • 打赏
  • 举报
回复
package com.cn.sjd;

import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTPClient;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileOutputStream;
 
/**
* Apache commons-net 试用一把,看看FTP客户端工具做的好用不
*
*/
public class FtpTest {
    public static void main(String[] args) {
        testUpload();
       // testDownload();
    }
 
    /**
     * FTP上传单个文件测试
     * 1.连接服务
     * 2.确定你要上传的文件
     * 3.指定你在服务器端存放的位置
     */
    public static void testUpload() {
        FTPClient ftpClient = new FTPClient();
        FileInputStream fis = null;
 
        try {
            ftpClient.connect("192.168.1.111");
            ftpClient.login("admin", "javaf");
 
            File srcFile = new File("F:\\images\\460.jpg");
            fis = new FileInputStream(srcFile);
            //设置上传目录
            ftpClient.changeWorkingDirectory("/lanjie/pic");
            ftpClient.setBufferSize(1024);
            ftpClient.setControlEncoding("GBK");
            //设置文件类型(二进制)
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftpClient.storeFile("work.jpg", fis);
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("FTP客户端出错!", e);
        } finally {
            IOUtils.closeQuietly(fis);
            try {
                ftpClient.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
                throw new RuntimeException("关闭FTP连接发生异常!", e);
            }
        }
    }
 
    /**
     * FTP下载单个文件测试
     */
    public static void testDownload() {
        FTPClient ftpClient = new FTPClient();
        FileOutputStream fos = null;
 
        try {
            ftpClient.connect("192.168.1.111");
            ftpClient.login("admin", "javaf");
 
            String remoteFileName = "/lanjie/pic/girl.jpg";
            fos = new FileOutputStream("c:/down.jpg");
 
            ftpClient.setBufferSize(1024);
            //设置文件类型(二进制)
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftpClient.retrieveFile(remoteFileName, fos);
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("FTP客户端出错!", e);
        } finally {
            IOUtils.closeQuietly(fos);
            try {
                ftpClient.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
                throw new RuntimeException("关闭FTP连接发生异常!", e);
            }
        }
    }
}
xiuyouxu 2015-09-09
  • 打赏
  • 举报
回复
上传的文件没有问题,在ftp服务器上,可以用unzip命令解压,里面的文件也是完整的。
qq_23371523 2015-09-08
  • 打赏
  • 举报
回复
上传的文件是否有问题

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧