【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2186字,纯文字阅读大概需要4分钟。
内容图文
【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题
一. 问题重现
-
压缩文件下载下来后, 文件大小看起来是没问题, 解压缩的时候提示压缩文件数据错误。
-
图片下载下来以后,文件大小正常,打开只有一行下载后的路径
二. 问题解决思路
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下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题全部内容,希望文章能够帮你解决【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。