很多网站都会需要文件上传、下载的功能,但是服务器本身配置(如容量、带宽等等)可能扛不住大量的上传、下载,这时候,利用一些现成的云存储服务来分担一下服务器的压力。这里主要介绍一下腾讯云COS的使用,大概的功能流程是:
- 前端(JS)实现文件上传功能;
- 后端(PHP)给前端发放签名,使前端可以直接访问COS;
- 根据COS生成的文件链接访问文件。
PHP后端签名机制
以Laravel项目为例:
首先,在项目目录下,新建目录app/Plugins/Qcloud/Cos
;然后,下载COS的PHP SDK,将SDK中src/qcloud/cos
下所有文件复制到项目的app/Plugins/Qcloud/Cos
下,这里只用到Auth.php
。大概代码:
routes/web.php
1 |
|
app/Plugins/Qcloud/Cos/Auth.php
1 |
|
config/web.php
1 |
|
QcloudController.php
1 |
|
JS前端上传文件
下载COS的JS SDK,将SDK中dist/cos-js-sdk-v4.js
复制到项目的public/js
下,注意使用SDK需要浏览器支持HTML 5
。大概代码:
1 |
|
其他
防盗链
如果不想存在COS上的文件,被其他网站盗用,那么可以在COS后台上给对应的存储痛(Bucket)设置Referer
白名单,防止被恶意盗链。当然,伪造Referer
的请求应该也防不了。
定时清理
因为前端可以直接与COS连接,上传的文件没有经过后端检验,所以有效的上传文件信息都应该记录在数据库里,然后在每天空闲时段将昨天上传的文件都遍历一遍(文件名前缀设为日期就可以据此检索),不记录在库的、类型不匹配的,体积过大的等此类文件都可以删除。
最后
一个网站本身要实现文件上传、下载功能并不难,但是总是会有各样的隐患(可参考HTTP文件上传的一个后端完善方案(NginX))。于此,借用现成的云存储服务来实现文件上传、下载功能,也是一个不错的可行方案。