通过 FTP 将文件复制到服务器后的文件大小差异

Posted

技术标签:

【中文标题】通过 FTP 将文件复制到服务器后的文件大小差异【英文标题】:File size differences after copying a file to a server vía FTP 【发布时间】:2010-09-05 08:43:14 【问题描述】:

我创建了一个 php 脚本来更新本地目录中的 Web 服务器。 我正在将脚本迁移到 Python 中。它在大多数情况下都可以正常工作,但是在执行 PUT 命令之后,文件的大小似乎发生了变化。因此,文件的大小与服务器上文件的大小不同。

一旦我再次从 FTP 服务器下载文件,唯一的区别就是 CR/LF 标记。这让我很恼火,因为同一个脚本正在比较要更新的文件的大小。此外,如果它意味着什么,该脚本可以通过 ftp_put 在 PHP 中完美运行。

from ftplib import FTP

ftpserver = "myserver"
ftpuser = "myuser"
ftppass = "mypwd"

locfile =  "g:/test/style.css"
ftpfile =  "/temp/style.css"

try:
    ftp = FTP(ftpserver, ftpuser, ftppass)
except:
    exit ("Cannot connect")

f = open (locfile, "r")
try:
    ftp.delete (ftpfile)
except:
    pass

# ftp.sendcmd ("TYPE I")
# ftp.storlines("STOR %s" % ftpfile, f)
ftp.storbinary("STOR %s" % ftpfile, f)
f.close()

ftp.dir (ftpfile)
ftp.quit()

有什么建议吗?

【问题讨论】:

【参考方案1】:

无论大小,小文件都占据文件系统上的整个节点。

我的主机倾向于在 ftp 中将所有小文件报告为 4KB,但在 shell 中给出了准确的大小,因此它可能是 ftp 客户端常见的“功能”。

【讨论】:

【参考方案2】:

你需要用rb打开二进制文件吗?

f = open (locfile, "rb")

【讨论】:

非常感谢,这是我需要的眼睛之间的镜头,我整个周末都在用头撞墙。这也适用于相反的情况,从 ftp 传输。 @PabloG 你刚才真的发表了那个评论,还是我被卷入了时间扭曲?【参考方案3】:

如果您在 Windows 或 *nix 环境中查看文件的属性,您会注意到两种大小。一个是扇区大小,一个是实际大小。扇区大小是硬盘上已用完的扇区数(以字节为单位)。这是因为在大多数现代文件系统中,两个文件不能位于同一个扇区,因此如果您的文件占满了扇区的一半,则整个扇区将被标记为已填充。

因此,您可能会将扇区文件大小与 FTP 服务器上的实际文件大小进行比较,反之亦然。

【讨论】:

以上是关于通过 FTP 将文件复制到服务器后的文件大小差异的主要内容,如果未能解决你的问题,请参考以下文章

将文件复制到FTP服务器时发生错误的解决办法

将文件复制到ftp服务器时发生错误

将文件复制到ftp服务器时发生错误

提示将文件复制到FTP服务器时发生错误,请检查是不是有权限将文件放到该服务器上。这个怎么解决?

Win7 自带FTP将文件复制到FTP服务器时发生错误。

通过 FTP 将表复制到 CSV 文件 [重复]