通过 FTP 将文件复制到服务器后的文件大小差异
题
我创建了一个 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()
有什么建议么?
解决方案
您是否需要使用二进制文件打开 locfile rb
?
f = open (locfile, "rb")
其他提示
如果您在 Windows 或 *nix 环境中查看文件的属性,您会注意到两种大小。一是扇区大小,一是实际大小。扇区大小是硬盘上已用完的扇区数(以字节为单位)。这是因为对于大多数现代文件系统来说,两个文件不能位于同一扇区,因此如果您的文件填满了扇区的一半,则整个扇区将被标记为已满。
因此,您可能会将扇区文件大小与 FTP 服务器上的实际文件大小进行比较,反之亦然。
无论大小如何,小文件都会占用文件系统上的整个节点。
我的主机倾向于在 ftp 中将所有小文件报告为 4kb,但在 shell 中会给出准确的大小,因此它可能是 ftp 客户端的常见“功能”。
不隶属于 StackOverflow