【工具应用】关于FileZilla传输文件时的Transfer type设定问题

2023-11-05

        在工作中经常会使用FileZilla软件(FTP工具)上传或者下载文件,最近遇到一个下载文件内容异常的问题,涉及到该软件中的Transfer type设置,于是进行了一些深入的学习,在此与君共享,以作前车之鉴。

问题概述

        在Win10环境下,使用FileZilla下载文件,其中主要包含两种后缀名:*.bin和*.ko。

        在Linux环境下,下载后的部分ko文件出现无法挂载的情况。

        使用Beyond Compare软件对比文件,如下图所示,异常文件的部分内容丢失。

        在网上找到以下两个帖子算是比较相关的:

【已解决】FileZilla传输(上传或下载)文件过程中,文件大小会变化

        该帖详细描述了作者在使用FileZilla时发现文件异常问题以及解决的过程。结论为,对于客户端和服务器之间的文件传输,若上传和下载使用的默认传输类型均为自动,那么对于文本文件,有可能会检测到服务器是Linux,而客户端是Windows,从而在传输过程中,进行各自对应的结束符转换,导致下载的文件大小发生变化,并且对应的文本文件在Notepad++打开时出现显示问题。

Important Notice: Do you use Filezilla? Avatars and Attachments lost?

        该帖作者遇到的问题是,使用Auto类型进行文件传输时,对于无后缀名的文件发生异常的情况。解决方法在于“Treat files without extension as ASCII file”的设定,文中同样提到了关于传输类型选择的问题,并且提供一些自己的想法和建议。

        虽然都跟我遇到的问题不一样,但是按照其中的建议,将传输类型修改为Binary之后,确实能够下载到正常的文件内容,因此只能先怀疑是FileZilla的Auto类型功能对应的判断逻辑中存在隐藏的Bug。

FTP的数据传输类型

        文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在应用层,即OSI模型的第七层(TCP 模型的第四层),使用TCP传输。客户在与服务器建立连接前,需要经过“三次握手”的过程,以保证连接和数据传输的可靠性。

        FTP 的目标是提高文件的共享性,它基于客户/服务器(C/S)模型而设计,在客户端与 FTP 服务器之间建立两个TCP连接,分别传输数据与命令。任何基于 FTP 的客户端软件都必须遵循 FTP 的工作原理,如下图所示。

        FTP标准(RFC 959)中所定义的数据类型有四种,即ASCII,Binary,EBCDIC和Iocal。但是,大多数情况下,只会用到ASCII和Binary两种,两者的区别主要是在不同操作系统中回车符与换行符的使用上,从而会导致文件大小和内容的差异出现。(详情可参阅FileZilla参考文档

        CR(Carriage Return)表示回车,'\r',ASCII码(0x0D)

        LF(Line Feed)表示换行,'\n',ASCII码(0x0A)

        同样对于下一行的表示,Dos和Windows使用(CR+LF);UNIX/Linux使用(LF);MAC OS使用(CR)。

        因此,同一个文本文件在不同的操作系统中需要进行相应的转换,才能够正常地显示和使用。

        在ASCII类型的传输中,FTP通常会自动地调整文件的内容,以便于把文件解释成本地计算机存储文本文件的相应格式,有可能会造成数据损坏。

        在二进制类型的传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。

FileZilla的传输类型(Transfer type)设置

        在FileZilla软件中,可以通过以下两种方式设置传输类型,可选类型项目包括:Auto,ASCII,Binary。

        1)Edit --> Settings --> Transfers --> FTP: File Types

        2)Transfer --> Transfer type

建议

  • 进行文件传输时,首先确认传输内容是否与传输类型设置相匹配。
  • 对于无法准确判断的文件,最好使用二进制(Binary)类型,以保证传输内容不做任何改动。
  • 全部使用压缩文件,则无需考虑默认传输类型为Auto的情况。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【工具应用】关于FileZilla传输文件时的Transfer type设定问题 的相关文章

  • FTP 错误 530 用户无法登录

    我正在尝试通过 FTP 访问我使用 Windows Server Web 64 位 版本的 IIS 7 0 设置的新 FTP 站点 但是当我尝试登录该网站时出现上述错误 但我可以登录到我的其他 FTP 站点 另外 当我从 IIS 管理器中选
  • 使用 .NET 进行选择性 FTP 下载

    我有一个 ftp 构建站点 新构建将在其中更新 它将在每个新构建的特定 ftp 位置创建一个名为 Build XXXXX 的新文件夹 我需要从 Build XXXXX 目录中的某个位置下载构建版本 例如 Builds Build XXXXX
  • 使用 PHP 生成 Windows .lnk 文件

    我正在开发一个项目 其中涉及运行 ProFTPd 的 FTP 服务器和为用户创建帐户的 PHP MySQL 后端 创建帐户后 系统会向用户发送电子邮件 其中包含其帐户详细信息以及下载 FileZilla 或 Cyber Duck 的说明 具
  • 使用 PHP 进行安全 FTP 连接

    我有一个带有登录详细信息的安全 FTP 服务器 我正在尝试使用 PHP 连接到该安全 FTP 服务器ftp ssl connect ftp connect and ftp login函数并将所有参数正确传递给该函数 但我惊讶地发现它没有连接
  • Filezilla - 需要将项目从服务器复制到桌面[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这可能非常简单明了 但我对 Filezilla 不太熟悉 不能犯错误 我需要将文件从服务器复制到桌面 而不实际将其从服务器中删除 实时站点
  • 通过 FTP over TLS/SSL 连接到未经认证的主机

    我从中获取文件的供应商正在从 FTP 更改为基于 SSL 的 FTP 我正在尝试更新我的代码net ftp to net ftptls 我需要连接的新主机未经认证 我的脚本报告此错误 主机名与服务器证书不匹配 供应商不会修复此问题 看着 u
  • 使用 Python 了解何时已从 FTP 源完全接收文件

    我正在使用 Python 开发一个执行以下操作的应用程序 监视特定目录并监视文件 转移到它 文件完成传输后 运行一些 文件上的外部程序 我开发这个应用程序的主要问题是知道文件何时完成传输 据我所知 该文件将通过 SFTP 传输到特定目录 P
  • Magento Connect Manager 和 ftp 写入文件权限

    将我的网站从开发域转移到实时域后 我尝试使用 magento 连接管理器安装扩展 但是我不断收到 CONNECT ERROR Please check for sufficient ftp write file permissions Yo
  • PHP + FTP删除文件夹中的文件

    我刚刚编写了一个 PHP 脚本 它应该连接到 FTP 并删除特殊文件夹中的所有文件 它看起来像这样 但我不知道需要什么命令来删除文件夹日志中的所有文件 任何想法
  • 使用 Python ftplib 获取远程 FTP 服务器中文件的 MD5 值

    使用 ftplib 将文件传输到服务器后 如何确定该文件与本地服务器中的文件的 MD5 from ftplib import FTP import hashlib ftp FTP server ftp login username pass
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 如何保持 Subversion 和远程服务器(通过 FTP)同步?

    我们很难保持 Subversion 和 FTP 同步 有时我们忘记提交更改并只是将它们推送到 Web 服务器 我们的 svn 文件夹分散在整个 Web 服务器中 有些东西存在于一个地方而不存在于另一个地方 等等 今天我想花点时间解决这个问题
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A
  • 是否可以使用 GitHub Action 和 GitHub FTP Deploy 将 Laravel Web 应用程序部署到共享托管?

    是否可以deploy the Laravel网络应用程序到共享主机使用 GitHub Action 和 GitHub FTP 部署 如果可能的话我应该如何更改 github workflows master yml on push bran
  • 使用管道将文件夹从 Bitbucket 存储库推送到公共服务器

    我在 Bitbucket 存储库中启用了管道 并且需要在每次构建后在我的服务器中运行 Angular 2 构建并部署 dist 文件夹 在执行构建命令后创建 我的 bitbucket pipelines yml 文件中有以下内容 image
  • 使用ftp协议连接密码包含“@”符号的服务器

    我正在尝试使用java中的FTP协议从服务器下载文件 通过使用以下 URL 我可以连接到服务器并下载文件 URL url new URL ftp user password host remoteFile type i 但是当我的密码包含
  • 使用 Python ftplib 的 FTPS - 需要会话重用

    因此 我尝试连接到 FTP 服务器以获取目录列表并下载文件 但是之后的第一个命令prot p 函数引发异常 从日志中产生这些错误 get 150 Here comes the directory listing r n resp 150 H
  • 在 PHP cURL 中设置 FTP 模式

    我有一些代码使用 PHP cURL 库通过 FTP 上传一些文件 我被告知将 FTP 模式从被动切换为主动 但我找不到如何做到这一点 相关文档中似乎没有选项 我实际上不确定它当前使用的是什么模式 或者我如何查看它 这个问题的答案是使用 cu
  • 主动\被动模式下 FTP 服务器的适当 iptables 规则

    我在 CentOS6 上安装了 ProFTPD 服务器 如果我使 ftp 本地主机 我可以正确连接 但如果我从外部尝试 我会收到消息 没有到主机的路由 但有一条到主机的路由 因为我是通过 SSH 连接的 我尝试添加以下 iptable 规则
  • 尝试使用 FTP_TLS 从同一目录下载第二个文件时出现“ftplib.error_perm:550 不允许操作”

    运行我的脚本时出现此错误 ftplib error perm 550 Operation not permitted ftpdownloader py import ftplib import threading import loggin

随机推荐