【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题
2021/4/30 8:00:09
本文主要是介绍【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题
- 一. 问题重现
- 二. 问题解决思路
- 1. 确认是不是上传就导致数据出错了
- 2. 是不是平台问题
- 三. 解决
- 四. 其他问题
- 4.1 下载下来文件大小异常, 只有几十个字节
一. 问题重现
-
压缩文件下载下来后, 文件大小看起来是没问题, 解压缩的时候提示压缩文件数据错误。
-
图片下载下来以后,文件大小正常,打开只有一行下载后的路径
二. 问题解决思路
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下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)