如何设计一个性能好的文件上传服务器?
存储桶用习惯了好像还真没考虑过这个问题,
其实对php的文件上传一直以来都有很多疑问,为啥设置上传大小的时候要设置php内存的限制,难道每个上传的文件都必须要吃满自身大小的服务器内存?如果是这样的话,并发一高,服务器内存不就直接满了?
另外,为啥要先由服务器缓存到一个目录,再由move_uploaded_file移动到自己需要上传的目录,这样的话,如果上传文件很大,这个过程又会很费时,为啥不能一步到位的把文件上传到自己要的目录呢?
还有一点,如果在上传的时候需要验证的话,我们好像也必须要等到上传文件到服务器的缓存目录后,再进行判断,就不能直接在文件头里判断,然后如果不对的话就终止文件的上传么?
理论上上传文件, 无非就是解析请求头, 然后开始读取 body, 这个 body 怎么读就是关键. , php-fpm 直接把文件写入到文件, 让 PHP 开发者易用, 这块确实有"问题", 多了一次读写文件. 增加易用性 理论上你直接读取上传的的文件, 必定消耗这么大的内存. Go 看着用流去切片读取. 待我研究一下.
uploadprogress
的扩展能满足你的需求uploadprogress:pecl github
如果使用服务器存储,可以使用分片上传,上传完成后服务器统一文件流操作合并成一个文件,这样文件不用全部一次性读进内存。
如果使用云存储,可以配合现在第三方存储自带的文件上传,后台服务器PHP只是配合做一些上传令牌鉴权之类。
MinIO - 多云对象存储 ,提供高性能、兼容 S3 的对象存储。
了解一下 :min.io/