首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >APPE命令传输完成检测服务器端

APPE命令传输完成检测服务器端
EN

Stack Overflow用户
提问于 2012-05-11 14:27:06
回答 2查看 579关注 0票数 0

我有一个通过FTP处理传入文件的服务。

在安装了Proftpd的Debian服务器上,我使用一个iNotify事件来确定文件传输何时完成,并且我可以开始使用它。

一旦文件不再被写入,就会触发该事件。

直到我发现新的尼康D4相机和WT-5无线发射机使用APPE命令来发送文件之前,这是非常有效的。

据我所读,APPE命令似乎以数据块的形式发送文件,这些数据块在第一个块创建文件后附加到服务器上的现有文件中。

但是,这会导致几个iNotify事件被触发,因为文件是witten到几次,而不是一次,直到连接关闭。

由于文件是在文件完成之前处理的,因此一旦处理完,就会导致错误。一旦处理完文件我就会删除。

由于我的这项服务必须保持快速处理传入文件,我非常喜欢这个解决方案与iNotify,并真的不想计时,如果文件大小保持不变的n秒钟,或任何东西,以确定文件传输是否完成。

,我的问题是:不需要检查文件大小或比较上一次修改的日期,是否有办法确定文件传输是否真的完成了?

我试着在proftpd中找到一种方法来做这件事,但没有结果。

xferlog声明同一文件已多次完成:

代码语言:javascript
复制
Fri May 11 14:15:41 2012 2 host-95-199-17-243.mobileonline.telia.com 131072 /var/app/incoming/file.JPG b _ i r auser ftp 0 * c
Fri May 11 14:15:43 2012 2 host-95-199-17-243.mobileonline.telia.com 262144 /var/app/incoming/file.JPG b _ i r auser ftp 0 * c
Fri May 11 14:15:47 2012 3 host-95-199-17-243.mobileonline.telia.com 385624 /var/app/incoming/file.JPG b _ i r auser ftp 0 * c

最后的c表示转让已经完成。

因此,如果我必须检查每个传入文件是否实际完成了该文件,这将意味着对于实际已完成的文件来说将出现不必要的延迟。

似乎这不是一个不寻常的问题,但却找不到任何关于它的东西。

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2016-01-09 19:41:38

不幸的是,这种用例没有很好的答案。问题是只有FTP客户端知道何时将数据上传到服务器,而FTP客户端知道何时完成“文件”。该协议以字节流的形式运行。而且,正如您已经注意到的,在APPE命令中,除了一次上传之外,上传还可以以块的形式进行。请注意,如果FTP客户端使用REST命令,然后是STOR,则可能会发生相同的行为。(比较而言,SFTP只允许按块上传,即它使用:OPENWRITEWRITEWRITE、.、CLOSE,更接近于用于编写文件的Unix系统调用。)

您甚至可能会尝试使用QUIT命令作为触发器,以了解该客户端已经完成了将其所有块上载到服务器。假设您的FTP客户端一次只打开一个FTP会话,这可能是可行的。

根据您的具体用例/需求,可能有可能找到其他解决方案;如果您愿意,可以随时给我发电子邮件。

希望这能有所帮助!

票数 0
EN

Stack Overflow用户

发布于 2016-01-16 01:09:09

Got还负责检测JPG传输的结束,并使用这些解决方案,绞车可以集成在脚本中:

Catching error: Corrupt JPEG data: premature end of data segment

一种检查数据是否完整的简单方法是分别检查FF D8和FF D9的前两个字节和最后两个字节。这两个字节分别标识JPEG文件的开始和结束。

或使用ImageMagick http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=8483

希望这能对D5有所帮助;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10553304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档