FTP 上传文件被阻塞的问题

※ 问题

程序里有一个功能是通过 FTP 上传升级包来完成系统的升级。

使用过程中发现,某些情况下,在某个文件升级时,进度条界面会显示正在上传,但这个过程一直在进行,不会结束。

※ 调试

FTP 上传的过程:升级包上传的过程实现里依次包括了使用操作系统的 “ 文件选择对话框 ” 来选择需要上传的文件、建立一个 FTP 连接、上传文件、断开 FTP 连接等。由于上传过程不是在 “ 瞬间 ” 能完成的,所以放在后台进行,前台使用一个进度条来更新状态。代码的实现很简单,开发过程中自测了多次,没有出现过问题。

是不是 FTP 服务端的问题?简单地验证了一下,结果正常。

是不是客户端程序里 FTP 组件的使用、连接等等出了问题呢?按上述步骤重新操作了一下,抓包工具里没有出现 FTP 相关的包。就是说 FTP 连接还没有开始。

尝试选择其他的文件上传,结果正常。

在经过这些操作以后,分析下来,问题集中在这个需要上传的文件。

会不会是这个文件有什么特殊的属性?是否被锁住?……

经过调试发现,这个文件正在被其他程序使用!

这下问题就清楚了,这个文件已经被其他程序以独占方式打开,等到这里准备上传时,打开文件这个操作被阻塞了,后续操作无法运行,只能一直等待下去。

※ 解决

在文件上传之前,先判断一下它是否被其他程序以独占方式打开,避免后续操作被阻塞。

Read More: