【踩坑】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.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下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题相关推荐
- linux下压缩文件解压文件,linux下 解压和压缩文件 rar文件解压
Linux 下压缩与解压.zip和.rar及.7z文件 Linux 下压缩与解压.zip和.rar及.7z文件 对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们: ...
- java文件解压文件_java 文件解压缩
直接上代码: import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; ...
- 压缩包文件解压文件是需要密码
压缩包文件在压缩的时候需要输入密码,这是因为文件在被压缩的时候设置了加密,只有输入正确的密码才能够解压文件,不知道密码的话,也没有办法直接销毁密码或者是绕开密码解压文件,你能够做的就只有尝试找回密码再 ...
- Linux 命令之 7z(7-zip) -- 压缩/解压文件
文章目录 一.命令介绍 (一)主要特征 1.使用 LZMA 算法 2.支持多种格式 (二)退出代码的含义 (三)关于通配符 (四)关于覆盖文件的提示回应 二.命令格式 三.常用子命令 四.常用选项 五 ...
- tomcat启动过程中更改war导致解压文件被清除
有一次接到一个需求需要本地部署的java项目要做服务器的迁移,采用tomcat部署war包的方式,心想着个太简单了,在新的服务器上安装下相同版本的jdk,然后把这个tomcat复制过去不就好了吗?连日 ...
- gzip压缩文件解压文件(gz文件)
安装 yum install gzip -y 压缩 gzip filename.txt gzip -c filename.txt > /tmp/filename.txt.gz 解压 gzip - ...
- java解压文件、复制文件、删除文件代码示例
文章目录 删除文件: 创建目录 拷贝文件 解压zip文件 解压文件时,可以采用多线程的方式,下面上代码: 创建类 @Slf4j public class FileOperation {private ...
- 小程序资源下载、解压、保存到本地及本地文件的使用
小程序对资源存储有限一般10M,不要超过限制 思路解析:将资源保存到本地,首先 需要获取到 本地路径 ,然后将文件下载(下载前需要判断文件是否更新,第一次和更新则需要下载,如果存在之前的资源则将其删除 ...
- ZipFile解压文件
/**第一个参数是压缩文件路径,第二个参数是要解压的文件夹路径,文件夹可以不存在会自动生成*/public void ZipDecompress(String frompath,String topa ...
最新文章
- 2018-2019-2 网络对抗技术 20165320 Exp4 恶意代码分析
- Jenkins实现Android自动化打包
- MongoDB的数据逻辑结构
- java引用 弱引用_了解Java弱引用
- mac版小达人点读包怎么安装_小达人点读笔扩容实战:16G变128G
- 瞧瞧苹果OS X如何干掉Linux
- HDU 5741 Helter Skelter(构造法)
- python生成器迭代_二十、深入Python迭代器和生成器
- java获取tomcat路径
- 对“最大子序列和问题”的一点思考
- 中国科学院大学2017年高等代数考研试题
- RFSoC应用笔记 - RF数据转换器 -15- API使用指南之Libmetal与结构体说明
- dell笔记本驱动安装失败,Dell Vostro 5470 在安装读卡器驱动时失败
- 83岁清华奶奶,62岁 IT 大爷被阿里40万年薪争抢,你大妈始终是你大妈,你大爷永远是你大爷!...
- 学习型红外遥控器的FPGA设计与实现
- Django微信抢票大作业总结
- PicGo+github搭建免费图床
- 通过跟踪源码证明在Java中通过执行Start()方法创建线程
- WebDriver - 伪浏览器PhantomJs(ghost driver) HtmlUnit
- 电子元件-TVS与肖特基二极管