这篇文章主要介绍PHP中使用摘要协议来实现大文件的断点续传的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
你是否曾经为大文件上传而苦恼?如果文件上传的过程中,因为某种原因中断了,是否可以从中断的位置继续上传,而不用重新上传整个文件?如果你有这样的困惑,那么请继续阅读下面的内容。
在现代网站应用中、上传文件是非常常见的。在任何语言中,通过使用一些工具,都可以实现文件上传的功能。但是,如果处理大文件上传的需求,还是有点麻烦的。
假如你此时正在上传一个很大的文件,大约一个小时过去了,进度是90%。突然断网了或者浏览器崩溃了,上传的程序退出,你要再全部重新来过。真的很不爽,对不对吗?还有更让人郁闷的是,如果你的网速很慢,那么,无论你重来多少次,你都不可能上传成功。
在PHP中,我们可以尝试利用摘要协议的断点续传功能来解决这个问题。
<强>什么是摘要吗?强>
摘要是一个基于HTTP的,文件断点续传开放协议。断点续传的意思是不管是用户自行中断,还是由于网络等原因的意外中断,都可以从中断的地方继续上传,而不用重新开始。
摘要协议是在2017年5月被Vimeo采用的。
<强>为什么用摘要吗?强>
引用Vimeo的博客:
我们之所以决定用地位、是因为它能以简洁开放的形式,将文件上传的过程标准化。这种标准化有利于API的开发者更加专注于应用本身的逻辑,而非文件上传的过程。
使用这种方式上传的另一个好处是,你可以在笔记本上开始上传文件,然后又转到手机或者其他设备继续上传同一个文件,这可以极大地提升用户体验。
图片:摘要大致的工作流程
<强>开始强>
第一步,加载依赖。
作曲家美元需要ankitpokhrel/tus-php
tus-php是用于摘要断点续传协议v1.0.0的一个的纯PHP框架,完美实现了服务端与客户端的交互。
更新:现在Vimeo官方PHP库的v3用的是TusPHP。
<强>创建一个处理请求的服务端强>
你可以像下面这样创建一个服务端。
# nginx.conf 位置/文件{ try_files uri uri//道路/美元/server.php ? query_string美元; }
假设我们服务端的URL是http://server.tus.local。因此,基于我们上面的Nginx配置,我们可以通过http://server.tus.local/files。来访问到我们的摘要终端。
基于RESTful风格的端点配置:
#获取有关服务器目前配置的信息\ 选项/文件 #检查上传的文件是否合法\ 头/文件/{upload-key} #创建\ POST/文件 #修改\ 补?文件/{upload-key} #删除\ 删除/文件/{upload-key}
查看协议细则获取更多关于路由的信息。
如果你是用类似于Laravel的框架,那么你就不需要在配置文件里定义这些了,可以直接定义路由来访问摘要的基础端点。我们会在另外的教程里介绍相关细节。
<强>使用tus-php客户端处理上传强>
服务器到位后,客户端可以块的形式上传文件。让我们首先创建一个简单的HTML表单来获取用户的输入。
& lt;形式action=皍pload.php"方法=皃ost"enctype=岸嗖糠?form-data"比; & lt;输入类型=癴ile"name=皌us_file"id=皌us-file"/比; & lt;输入类型=皊ubmit"值=https://www.yisu.com/zixun/"上传"/> 形式>
提交表单后,我们需要按照几个步骤来处理上传。
创建一个tus-php客户端对象
//摘要客户机 美元客户=new \ TusPhp \ \客户满足土族(& # 39;http://server.tus.local& # 39;);
上面代码中的第一个参数是你的摘要服务器地址。
<强> 2。使用文件元数据初始化客户端强>
为了确保上传文件的唯一性,我们需要给每个上传的文件以唯一标识。这样在文件中断后续传的时候,服务器就可以很清晰地辨识出,哪几个片段是属于同一个文件得。这个标识码可以自己指定,也可以由系统生成。