可锐资源网

技术资源分享平台,提供编程学习、网站建设、脚本开发教程

php文件分片上传,并发时遇到合并文件失败问题

说说文件分片上传!

1. 今天来给大家讲一下文件分片上传的原理和它所遇到的问题以及问题的解决办法,先来演示一下分片上传的功能,可见当前目录没有文件,点击上传文件,选择一个 7.8 兆的图片,目录下已把图片上传上来,就是所选的 7.8 兆图片。

2. 其原理是前端选择图片时把图片分割成多个小部分,一个小部分发送一次请求传到服务端,服务端接收后把这些文件合并起来。前端用的插件是 web upload,分片大小是 1 兆,超过 1 兆的文件就开启分片上传,如 5 兆的就分成五次,先判断有没有传过来,分片数就是浏览器这边的两个值,若分片,这两个值代表总片数分成八片,chok 代表当前是第几片。

3. 这里判断出分片就把文件的分片保存,然后进行合并,判断所有分片都上传完了再进行合并,合并方式是把文件读出来再重新写入,原理简单,但有个重要问题,即前端上传是并发操作,很多分片文件块是并发传过来的,比如第一、第四个还没完,可能第三、第五个就完了。

4. 如果没有锁功能,可能第二、第四次和第五次同时进来,同时进来会两次都执行,会重复把两次分片都写入总文件,会出现问题,如原本 7.8 兆或 7.2 兆的文件,传重复了可能十几兆,文件就不对了,多传数据显示不了,就损坏了,还有一种是其中一个把文件删了但没写完,第二个又写入不够,就写少了,但这种很少,一般是写多了,文件就废了。

5. 后来调试很久加了文件锁,foppen 打开要保存的总文件,用 foppen 锁起来,之前有一期讲过用独占锁形式锁起来,不让其他进程操作,只让当前进程操作,操作完解锁。锁起来后如果后面进程过来判断是失败的,就不会进去合并,不会合并重复,就是这样解决的。合并完解锁。

6. 所以做分片上传时一定要注意这个问题,并发处理一定要锁住,不然最后合并的文件可能有问题。这期就讲到这里,谢谢大家,下期见。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言