在FTP列表中表示未知文件大小的方法?

在FTP列表中表示未知文件大小的方法?,ftp,ftp-client,windows-explorer,Ftp,Ftp Client,Windows Explorer,我有一个FTP服务器运行在一个生成合成文件的设备上。i、 e.该文件实际上不存在于文件系统中。无论何时请求下载,它都是动态生成的。它的大小在生成之前是未知的 某些FTP客户端(例如Windows资源管理器)显然正在使用FTP LIST命令中的信息来确定下载后的预期文件大小。当我请求下载时,Windows资源管理器首先尝试FTP大小扩展(),服务器不支持该扩展。然后它下载整个文件(我在Wireshark中看到了全部内容),但它将文件截断为列表中报告的大小 这里的预期行为是什么?Windows资源管

我有一个FTP服务器运行在一个生成合成文件的设备上。i、 e.该文件实际上不存在于文件系统中。无论何时请求下载,它都是动态生成的。它的大小在生成之前是未知的

某些FTP客户端(例如Windows资源管理器)显然正在使用FTP LIST命令中的信息来确定下载后的预期文件大小。当我请求下载时,Windows资源管理器首先尝试FTP大小扩展(),服务器不支持该扩展。然后它下载整个文件(我在Wireshark中看到了全部内容),但它将文件截断为列表中报告的大小

这里的预期行为是什么?Windows资源管理器是否超出了此优化/安全措施的规范

我们当前的解决方法是显示文件大小,使其比文件列表中的任何时候都大

是否有方法在
ls-l
/FTP列表中表示未知文件大小?正如我所读到的,列表格式没有标准化,但我猜POSIX'-l'格式非常常见,Windows资源管理器正在解析它

我应该如何处理这种情况

这里的预期行为是什么?Windows资源管理器是否超出了此优化/安全措施的规范

该规范没有说明任何关于根据传输的大小检查文件大小的内容,但是如果严格遵循规范,则不知道文件是否已完全传输。在客户机上,您只能看到数据连接已关闭,但这也可能是因为服务器端出现问题。 因此,客户正试图绕过这些限制

有没有一种方法可以在'ls-l'/FTP列表中表示未知的文件大小?当我阅读RFC959时,列表格式并没有标准化,但我猜POSIX格式非常常见,Windows资源管理器正在解析它

是的,没有标准格式,但通常使用
ls-l
的输出。由于这涉及到一个文件系统,其中包含所有已知文件大小的静态文件,因此无法给出类似“未知”大小的内容。但是由于格式没有标准化,您可以尝试简单地给出文件列表,没有任何大小(如NLST)


除此之外,您的客户端只实现FTP的典型用例,即传输静态文件。在这种情况下,文件大小是已知的。但是你正在以一种非典型的方式使用FTP,所以你必须处理这些错过的期望和欺骗。由于涉及防火墙或专用网络时,FTP始终是一场噩梦,因此您最好切换到其他广泛使用的协议,如HTTP或WebDAV。

客户端的解决方法可能是使用wget或“FTP”命令ftp命令示例:

  • 开放式控制台
  • ftpuser@yourserver
  • cd到您的路径
  • 获取您的文件名
  • 因为wget和ftp get命令都不需要大小来下载文件


    另一个解决方案是使用自己的ftp服务器。您可以找到许多具有基本功能、gui客户端支持和简单脚本语言代码(如php)的服务器。更改此功能的代码很简单。我对其中一个项目也做了同样的工作。

    基于
    ls-l/proc
    ,似乎惯例是将此类合成文件报告为0字节。Windows资源管理器无法处理它。看起来我们必须坚持目前的解决方案。我知道这个问题已经过时了,但是你找到了新的解决方案吗?或者你只是坚持展示一个更大的假尺寸?@Ibrahim我用了更大的假尺寸。