FTP 上传文件被阻塞的问题
※ 问题
程序里有一个功能是通过 FTP 上传升级包来完成系统的升级。
使用过程中发现,某些情况下,在某个文件升级时,进度条界面会显示正在上传,但这个过程一直在进行,不会结束。
※ 调试
FTP 上传的过程:升级包上传的过程实现里依次包括了使用操作系统的 “ 文件选择对话框 ” 来选择需要上传的文件、建立一个 FTP 连接、上传文件、断开 FTP 连接等。由于上传过程不是在 “ 瞬间 ” 能完成的,所以放在后台进行,前台使用一个进度条来更新状态。代码的实现很简单,开发过程中自测了多次,没有出现过问题。
是不是 FTP 服务端的问题?简单地验证了一下,结果正常。
是不是客户端程序里 FTP 组件的使用、连接等等出了问题呢?按上述步骤重新操作了一下,抓包工具里没有出现 FTP 相关的包。就是说 FTP 连接还没有开始。
尝试选择其他的文件上传,结果正常。
在经过这些操作以后,分析下来,问题集中在这个需要上传的文件。
会不会是这个文件有什么特殊的属性?是否被锁住?……
经过调试发现,这个文件正在被其他程序使用!
这下问题就清楚了,这个文件已经被其他程序以独占方式打开,等到这里准备上传时,打开文件这个操作被阻塞了,后续操作无法运行,只能一直等待下去。
※ 解决
在文件上传之前,先判断一下它是否被其他程序以独占方式打开,避免后续操作被阻塞。