FTP传输两种方式
2012-07-25 20:52
162 查看
最近一直运行没问题的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传输模式和二进制数据传输模式。
1.ASCII传输方式 假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。
但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。
2.二进制传输模式 在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到IBM
VM系统,在对方系统上,此文件不能执行。(但是,它可以从VM系统上以二进制方式拷贝到另一macintosh,是可以执行的)。
如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。
因此,这就意谓着知道你要传输的是什么类型的数据是重要的,表6.1.1给出一些常见文件类型的提示。
表6.1.1 常见文件类型
很多数据库程序用二进制格式存贮数据,即使数据原本是文本式。所以,除非你知道你的软件的用途,我们建议对数据库文件先用二进制方式试试。然后看看你传输的文件能否正确工作。如果不能,再试用另一方式。可执行的文件一般是二进制文件。
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传输模式和二进制数据传输模式。
1.ASCII传输方式 假定用户正在拷贝的文件包含的简单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 UNIX“shell archive” UNIX“tar file” backup file Compressed file Unencoded file Excutable file Postscript file | ASCII 大多是二进制 大多是二进制,也可能是ASCII 大多是二进制,也可能是ASCII ASCII ASCII ASCII 二进制 二进制 二进制 ASCII 二进制 二进制 |
相关文章推荐
- FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式
- ftp两种传输方式区别
- FTP传输文件的两种方式
- FTP的ASCII和Binary两种传输方式有何不同
- FTP的ASCII和Binary两种传输方式有何不同
- FTP的传输的两种方式和工作方式比较,二进制数据传输和ASCII传输区别
- ftp两种传输方式区别
- FTP的ASCII和Binary两种传输方式有何不同
- RTSP流媒体数据传输的两种方式(TCP和UDP)
- 《连载 | 物联网框架ServerSuperIO教程》- 10.持续传输大块数据流的两种方式(如:文件)
- ftp二进制与ascii传输方式区别
- TCP连接的两种简单的数据传输方式
- 《连载 | 物联网框架ServerSuperIO教程》- 10.持续传输大块数据流的两种方式(如:文件)
- Modbus通讯两种传输方式
- 关于linux中FTP的两种传输模式及常用的命令
- 关于网页传输GET 和 POST 两种方式的研究(2)
- 网络数据传输加密最常用的两种方式
- FTP中的两种工作方式:主动方式和被动方式
- FTP两种传输模式小结
- Java HttpClient两种数据传输方式