问答 / 4 / 10 / 创建于 4年前
当所要上传的文件超出基础配置之后,会出现错误;或者是大点的文件上传速度慢你们怎么处理的呢?
分片上传
一般都是前端上传,不走服务器的,传给后端的时候只传上传完成的字符串等信息就可以
现在的应用都是由第三方提供存储服务。例如:阿里云、腾讯云、华为云等。都提供了小文件存储、大文件存储解决方案。
开发者可以根据实际应用开发,如果是混合开发使用API上传、如果是前后端分离,可以使用前段调用API上传,可以减轻后端服务器压力。
简而言之,一般PHP不干这个,要不然js做,要不然app做。
例如七牛云,前端请求后端返回 upload_url、bucket、token、expires,前端调用 api 上传后把存储地址 url 传给后端。
upload_url
bucket
token
expires
api
url
一般大文件都是用分片上传的吧
一般是前端js对接第三方的存储服务、七牛云、腾讯云等,分片上传;自己服务器做的话可以看这个包https://github.com/peinhu/AetherUpload-Laravel
https://github.com/peinhu/AetherUpload-Laravel
对大文件切块,前端并发上传,用唯一id关联所有分片,服务端用offset拼接
最后怎么处理的?最近项目要上传大视频到oss阿里云
阿里云本身有node.js前端分片上传的。在阿里云oss配置好对应的id和key,还有其他配置然后安全起见一般用sts(上传的临时凭证)后台代码demo
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use AlibabaCloud\Client\AlibabaCloud; use AlibabaCloud\Client\Exception\ClientException; use AlibabaCloud\Client\Exception\ServerException; class BigToYunController extends Controller { protected $appid = ''; protected $secret = ''; protected $region = ''; protected $bucket = ''; protected $endpoint = ''; public function __construct(){ //这里还可以限制域名和ip todo $this->appid = 'LTAI4333333'; //子账号的 $this->secret = 't4Ig5f5666666'; //子账号的 $this->region = config('aliyun.oss.region'); $this->bucket = config('aliyun.oss.bucket'); $this->endpoint = config('aliyun.oss.endpoint'); } //返回sts 临时上传配置 public function sts(){ //构建一个阿里云客户端,用于发起请求。 //构建阿里云客户端时需要设置AccessKey ID和AccessKey Secret。 AlibabaCloud::accessKeyClient($this->appid, $this->secret) ->regionId($this->region) ->asDefaultClient(); //设置参数,发起请求。 try { $result = AlibabaCloud::rpc() ->product('Sts') ->scheme('https') // https | http ->version('2015-04-01') ->action('AssumeRole') ->method('POST') ->host('sts.aliyuncs.com') ->options([ 'query' => ['RegionId' => $this->region, 'RoleArn' => "acs:ram::1343555555:role/ramosstest", // 'RoleSessionName' => "hui@134555555.onaliyun.com",], //RamOssTest ] ) ->request(); $res = $result->toArray(); //$sts = \Arr::get($res,'Credentials'); //$sts = array_push($sts,['']); //todo return $this->success('文件上传临时配置',$res); //dd($result->toArray()); } catch (ClientException $e) { echo $e->getErrorMessage() . PHP_EOL; } catch (ServerException $e) { echo $e->getErrorMessage() . PHP_EOL; } } }
阿里云oss支持分片上传
我要举报该,理由是:
分片上传
一般都是前端上传,不走服务器的,传给后端的时候只传上传完成的字符串等信息就可以
现在的应用都是由第三方提供存储服务。例如:阿里云、腾讯云、华为云等。都提供了小文件存储、大文件存储解决方案。
开发者可以根据实际应用开发,如果是混合开发使用API上传、如果是前后端分离,可以使用前段调用API上传,可以减轻后端服务器压力。
简而言之,一般PHP不干这个,要不然js做,要不然app做。
例如七牛云,前端请求后端返回
upload_url
、bucket
、token
、expires
,前端调用api
上传后把存储地址url
传给后端。一般大文件都是用分片上传的吧
一般是前端js对接第三方的存储服务、七牛云、腾讯云等,分片上传;自己服务器做的话可以看这个包
https://github.com/peinhu/AetherUpload-Laravel
对大文件切块,前端并发上传,用唯一id关联所有分片,服务端用offset拼接
最后怎么处理的?最近项目要上传大视频到oss阿里云
阿里云oss支持分片上传