FTP传输两种方式

最近一直运行没问题的FTP下载程序出现了问题,提示无法解压。经过分析,我用FileZilla手工下载后解压无误,而我的程序使用apache.common.FTP包下载即出现问题,无法解压。对比两者发现,后者的文件大小要大。查找资料如下,代码中将传输方式改为二进制传输下载,问题解决。

for(FTPFile ff:fsname) {

                 File localFile = new File(localPath+"\\"+ff.getName());

                        is = new FileOutputStream(localFile);

                        ftpClient.setControlEncoding("GBK");

                        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

                        ftpClient.retrieveFile(ff.getName(), is);

                        is.flush();

                        is.close();                                      

                    }


      分析对方公司,估计是改变了传输方式,将FTP服务器改为了Linux后采用了二进制上传,因此出现了这种问题。

       FTP 协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过 ftp 协议对话,并且能访问 Internet,   你可以用 ftp 命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。

FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。

1ASCII传输方式 假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。

但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。

2.二进制传输模式 在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到IBM VM系统,在对方系统上,此文件不能执行。(但是,它可以从VM系统上以二进制方式拷贝到另一macintosh,是可以执行的)。

如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。

因此,这就意谓着知道你要传输的是什么类型的数据是重要的,表6.1.1给出一些常见文件类型的提示。

6.1.1   常见文件类型

               

                

Text file

Spreadsheet

Database file

Word processor file

Program source code

Electronic mail messages

UNIXshell archive

UNIXtar file

backup file

Compressed file

Unencoded file

Excutable file

Postscript file

ASCII

大多是二进制

大多是二进制,也可能是ASCII

大多是二进制,也可能是ASCII

ASCII

ASCII

ASCII

二进制

二进制

二进制

ASCII

二进制

二进制

很多数据库程序用二进制格式存贮数据,即使数据原本是文本式。所以,除非你知道你的软件的用途,我们建议对数据库文件先用二进制方式试试。然后看看你传输的文件能否正确工作。如果不能,再试用另一方式。可执行的文件一般是二进制文件。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值