其他分享
首页 > 其他分享> > FTPClient下载文件0kb问题

FTPClient下载文件0kb问题

作者:互联网

困扰了2天的问题终于解决

错误代码

/**
    * @Description: 从ftp服务器下载文件到指定输出流
    * @param remotePath,fileName,outputStream FTP服务器上的相对路径,文件名,输出流
    * @return 布尔值 成功返回true,异常返回false
    * @author Beyond
    * @date 2021/6/5 14:34
    */
    public static boolean downloadFile(String remotePath, String fileName, OutputStream outputStream) {
        boolean result = false;
        try {
            if (initFtpClient()){
                return false;
            }
            // 转移到FTP服务器目录
            ftp.changeWorkingDirectory(remotePath);
            // 通知服务器开通给一个端口,防止挂死
            ftp.enterLocalPassiveMode();
            // 取得指定文件夹下文件列表
            FTPFile[] fs = ftp.listFiles();
            for (FTPFile ff : fs) {
                // 取得指定文件并下载
                if (ff.getName().equals(fileName)) {
                    ftp.enterLocalPassiveMode();
                    ftp.retrieveFile(remotePath+"/"+fileName,outputStream);
                    result = true;
                }
            }
            ftp.logout();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                    ioe.printStackTrace();
                }
            }
        }
        return result;
    }

错误原因
image
修正后代码

/**
    * @Description: 从ftp服务器下载文件到指定输出流
    * @param remotePath,fileName,outputStream FTP服务器上的相对路径,文件名,输出流
    * @return 布尔值 成功返回true,异常返回false
    * @author Beyond
    * @date 2021/6/5 14:34
    */
    public static boolean downloadFile(String remotePath, String fileName, OutputStream outputStream) {
        boolean result = false;
        try {
            if (initFtpClient()){
                return false;
            }
            // 转移到FTP服务器目录
            ftp.changeWorkingDirectory(remotePath);
            // 通知服务器开通给一个端口,防止挂死
            ftp.enterLocalPassiveMode();
            // 取得指定文件夹下文件列表
            FTPFile[] fs = ftp.listFiles();
            for (FTPFile ff : fs) {
                // 取得指定文件并下载
                if (ff.getName().equals(fileName)) {
                    ftp.enterLocalPassiveMode();
                    ftp.retrieveFile(
                            new String(fileName.getBytes(StandardCharsets.UTF_8),StandardCharsets.ISO_8859_1),
                            outputStream);
                    result = true;
                }
            }
            ftp.logout();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                    ioe.printStackTrace();
                }
            }
        }
        return result;
    }

附图显示成功后结果
image
image

标签:ftp,outputStream,false,fileName,0kb,remotePath,服务器,FTPClient,下载
来源: https://www.cnblogs.com/beyond-myp/p/14878062.html