Java教程

【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题

本文主要是介绍【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题

    • 一. 问题重现
    • 二. 问题解决思路
      • 1. 确认是不是上传就导致数据出错了
      • 2. 是不是平台问题
    • 三. 解决
    • 四. 其他问题
      • 4.1 下载下来文件大小异常, 只有几十个字节

一. 问题重现

  1. 压缩文件下载下来后, 文件大小看起来是没问题, 解压缩的时候提示压缩文件数据错误。
    在这里插入图片描述

  2. 图片下载下来以后,文件大小正常,打开只有一行下载后的路径
    在这里插入图片描述

二. 问题解决思路

1. 确认是不是上传就导致数据出错了

从服务器用ftp下载文件下来以后, 发现是正常的. 说明上传没有问题, 也就是下载的问题

2. 是不是平台问题

使用filezilla在本地windows搭建ftp服务器, 本地测试发现下载后的文件是正常的. 发现确实是Linux上的问题

三. 解决

在网上查了些博客

DOS/Windows和Linux/Unix的文件换行回车格式不同,基于 DOS/Windows的文本文件在每一行末尾有一个 CR (回车)和 LF (换行),而 UNIX 文本只有一个换行。

LF: Line Feed, U+000A 正则表达式:/n
CR: Carriage Return, U+000D 正则表达式:/r

Windows中的换行符为CRLF, 即正则表达式的\r\n(ASCII码为13和10), 而Unix(或Linux)换行符为LF, 即正则表达式的\n.

ASCII模式和Binary模式的区别是回车换行的处理,Binary模式不对数据进行任何处理,ASCII模式将回车换行转换为本机的回车字符,比如:UNIX下是\n,Windows下是\r\n,Mac下是\r

这就好比我们在服务器下载文件的时候, sz 命令要加-b的原因(以二进制方式传输(binary))

确定了问题后, 代码如下:
需要注意的是, 必须在login()之后加这个代码

client.setFileType(FTP.BINARY_FILE_TYPE);

整体代码:

  public static FTPClient initClient() throws IOException {
    FTPClient client = new FTPClient();
    client.setConnectTimeout(ftpConf.getConnectTimeoutMills());
    client.setControlEncoding(ftpConf.getEncoding());
    client.enterLocalPassiveMode();
    //解决中文乱码问题
    client.setAutodetectUTF8(true);

    client.connect(ftpConf.getHost(), ftpConf.getPort());
    client.login(ftpConf.getUsername(), ftpConf.getPassword());
    if (!FTPReply.isPositiveCompletion(client.getReplyCode())) {
      log.error("未连接到ftp({}:{}),用户名或密码错误", ftpConf.getUsername(), ftpConf.getPassword());
      client.disconnect();
    } else {
      log.info("ftp({}:{})连接成功", ftpConf.getHost(), ftpConf.getPort());
    }
    client.setFileType(FTP.BINARY_FILE_TYPE);
    return client;
  }

四. 其他问题

4.1 下载下来文件大小异常, 只有几十个字节

在这里插入图片描述
这个是 我在上面加

client.setFileType(FTP.BINARY_FILE_TYPE);

的时候, 加在了login()之前导致的

这篇关于【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!