【踩坑】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.connect(ftpConf.getHost(), ftpConf.getPort());client.login(ftpConf.getUsername(), ftpConf.getPassword());//解决中文乱码问题client.setAutodetectUTF8(true);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下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题相关推荐

  1. linux下压缩文件解压文件,linux下 解压和压缩文件 rar文件解压

    Linux 下压缩与解压.zip和.rar及.7z文件 Linux 下压缩与解压.zip和.rar及.7z文件 对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们: ...

  2. java文件解压文件_java 文件解压缩

    直接上代码: import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; ...

  3. 压缩包文件解压文件是需要密码

    压缩包文件在压缩的时候需要输入密码,这是因为文件在被压缩的时候设置了加密,只有输入正确的密码才能够解压文件,不知道密码的话,也没有办法直接销毁密码或者是绕开密码解压文件,你能够做的就只有尝试找回密码再 ...

  4. Linux 命令之 7z(7-zip) -- 压缩/解压文件

    文章目录 一.命令介绍 (一)主要特征 1.使用 LZMA 算法 2.支持多种格式 (二)退出代码的含义 (三)关于通配符 (四)关于覆盖文件的提示回应 二.命令格式 三.常用子命令 四.常用选项 五 ...

  5. tomcat启动过程中更改war导致解压文件被清除

    有一次接到一个需求需要本地部署的java项目要做服务器的迁移,采用tomcat部署war包的方式,心想着个太简单了,在新的服务器上安装下相同版本的jdk,然后把这个tomcat复制过去不就好了吗?连日 ...

  6. gzip压缩文件解压文件(gz文件)

    安装 yum install gzip -y 压缩 gzip filename.txt gzip -c filename.txt > /tmp/filename.txt.gz 解压 gzip - ...

  7. java解压文件、复制文件、删除文件代码示例

    文章目录 删除文件: 创建目录 拷贝文件 解压zip文件 解压文件时,可以采用多线程的方式,下面上代码: 创建类 @Slf4j public class FileOperation {private ...

  8. 小程序资源下载、解压、保存到本地及本地文件的使用

    小程序对资源存储有限一般10M,不要超过限制 思路解析:将资源保存到本地,首先 需要获取到 本地路径 ,然后将文件下载(下载前需要判断文件是否更新,第一次和更新则需要下载,如果存在之前的资源则将其删除 ...

  9. ZipFile解压文件

    /**第一个参数是压缩文件路径,第二个参数是要解压的文件夹路径,文件夹可以不存在会自动生成*/public void ZipDecompress(String frompath,String topa ...

最新文章

  1. 2018-2019-2 网络对抗技术 20165320 Exp4 恶意代码分析
  2. Jenkins实现Android自动化打包
  3. MongoDB的数据逻辑结构
  4. java引用 弱引用_了解Java弱引用
  5. mac版小达人点读包怎么安装_小达人点读笔扩容实战:16G变128G
  6. 瞧瞧苹果OS X如何干掉Linux
  7. HDU 5741 Helter Skelter(构造法)
  8. python生成器迭代_二十、深入Python迭代器和生成器
  9. java获取tomcat路径
  10. 对“最大子序列和问题”的一点思考
  11. 中国科学院大学2017年高等代数考研试题
  12. RFSoC应用笔记 - RF数据转换器 -15- API使用指南之Libmetal与结构体说明
  13. dell笔记本驱动安装失败,Dell Vostro 5470 在安装读卡器驱动时失败
  14. 83岁清华奶奶,62岁 IT 大爷被阿里40万年薪争抢,你大妈始终是你大妈,你大爷永远是你大爷!...
  15. 学习型红外遥控器的FPGA设计与实现
  16. Django微信抢票大作业总结
  17. PicGo+github搭建免费图床
  18. 通过跟踪源码证明在Java中通过执行Start()方法创建线程
  19. WebDriver - 伪浏览器PhantomJs(ghost driver) HtmlUnit
  20. 电子元件-TVS与肖特基二极管

热门文章

  1. 网页版百度网盘倍速方法
  2. html table tb左对齐,标签之美五——网页表格的设计
  3. stm32简易示波器(标准库)
  4. 微博的大数据挖掘:知著、见微、晓意
  5. 如何写出自媒体10W+爆文?
  6. 对学姐的U-net网络的学习杂记
  7. 服务器复制文件出现io错误,win7系统复制文件时发生IO错误的解决方法
  8. iphone与android共享位置,在iPhone或Android上分享你的位置
  9. 由IRR看超越方程求解
  10. mysql碎片整理innodb_Innodb表碎片整理