原因
首先,此问题是因为FTP协议定义的数据传输方式有关,当Java FTP客户端使用ASCII传输时会发现有些上传的文件已经被损坏。
FTP协议规定了两种传输方式分别是ASCII与binary方式:
-
ASCII 方式,这种机制指,在针对传输内容是 ASCII 码文本时,文件内容会被调整,有时会造成传输的文件被损坏, ASCII 方式会把文件中的某些字符串位丢弃,所以不能保证文件数据的每一位都是重要的。
-
二进制方式,首先二进制方式保证了文件内容所有数据位都是重要的。
-
经过验证在传输文件类型为非文本内容的文件,使用 ASCII 传输方式造成 copy 的文件已经损坏。
示例代码(注意FTP.BINARY_FILE_TYPE/FTP.ASCII_FILE_TYPE):