有时当我通过 FTP 上传大量小文件时,一些文件的内容会被 FTP 控制消息替换。例如,上传网站后,我会注意到图片没有显示。当我在服务器上检查图片时,我发现其内容已被替换为类似
Response: 125 Data connection already open; Transfer starting.
Response: 226 Transfer complete.
Status: Directory listing successful
很难重现。我发现任何损坏的文件,通常都可以重新传输它们。如果我重新传输整个网站,可能会有不同的文件损坏,也可能根本没有文件损坏。
这个问题困扰了我好几年,在此期间我更换了电脑(两次)、路由器、电缆调制解调器,还搬到了半个国家以外的地方。我最近没有遇到这个问题,但这可能只是因为我学会了避免它的方法,比如在传输之前将所有内容压缩。顺便说一句,我使用 FileZilla。
我曾经向我的一个网络托管商描述过这个问题。他们从未听说过这样的事情,一点头绪都没有。我很想知道发生了什么。事实上,我对使用 FTP 传输少量文件以外的任何内容都非常谨慎。
答案1
很简单:宇宙(和/或墨菲)正在惩罚你继续使用像 FTP 这样彻底过时且不安全的协议。
当您使用 FTP 连接到 Web 服务器时,您的用户名和密码将以未加密的形式明文发送,供所有人和“老大哥”阅读。您使用 FTP 上传或下载的所有文件的内容也是如此。仅出于安全原因,我强烈建议切换到 SFTP,这是 SSH 的内置功能。任何值得您信赖的 Web 托管服务提供商都支持 SSH 和 SFTP。
您在服务器端遇到的任何 FTP 问题在使用 SFTP 时几乎肯定不会出现,因为 SFTP 连接由服务器上完全独立的守护进程/服务处理。
与 FTPS、FTPES 等不同,SSH/SFTP 实现具有非常一致的互操作性。通过 SFTP 传输文件时,您不太可能遇到奇怪且不可预测的问题。
答案2
我认为 FTP 服务器存在错误(您的主机的问题)。确保您使用的是最新版本的 FileZilla,并将其配置为记录所有 FTP 会话,这样如果您发现此损坏,您可以向主机提供会话日志。这可能有助于他们排除故障。
如果您有主机的 shell 访问权限,则可以改用 SCP。
答案3
为了安全起见,我会确保将传输设置为“二进制”,有时它会以 ASCII 模式传输文件,而这通常会导致所谓的损坏,所以尝试一下,如果这不能解决你的问题,那么我会考虑更换/更新你的服务器和客户端,如果这也没有帮助,那么请查看界面上是否有错误......
答案4
问题的潜在根源(以及许多其他与损坏文件相关的类似问题):
由于文件中出现重复数据(例如大量零)而导致的无效块
和/或其他内容:
- 网络配置相关(MTU 大小?!)
- 过时的服务器软件(几年前 Debian 中存在与此问题相关的错误)
- 不使用二进制模式
解决方法:
正如其他人提到的,切换到 SFTP - 加密将最大限度地减少重复数据包/块的出现
在客户端中启用压缩 - 与选项 1 一样,压缩将执行类似操作
FileZilla 票证(6岁):https://trac.filezilla-project.org/ticket/4672