PHP中filesystem的使用redis
最近在用腾讯云COS上传对象的时候,涉及到文件流的使用api
参考文档:https://cloud.tencent.com/document/product/436/12266服务器
此处是将fopen打开的资源句柄,直接做为参数传到body中。ide
问题:上传大文件时,须要将其分块传到本地服务器,再由服务器拼接后,做为body参数传入进去,若是不考虑往新的文件里面追加写入的话,做为文件流如何处理?spa
方案:使用redis队列存入数据流,而后当前文件所有写入后,指针
$tempName = $video->getPathname();server
Redis::rpush($key.'stream',file_get_contents($tempName));对象
//往redis里面写入文件流blog
$filename="/saas/wwwroot/api_server/upload/".$key.'file.'.$extension;接口
if (!file_exists($filename)){
touch($filename);
chmod($filename,0777);
}
//文件分块所有传输到本地服务器
if ($redis_size==$totalSize){
$stream=Redis::lrange($key.'stream',0,-1);
$fp = fopen ( $filename, 'w+' );
$fs = 0; //写入的文件大小
foreach ($stream as $v){
$fs += fwrite($fp,$v);
}
fseek($fp,0); //把文件指针指向文件的开头
//继续业务处理。。。
}
而后将这个$fp做为body对应的参数值传入腾讯云upload接口中。
下图是我在项目中的代码部分截取,做为参考: