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接口中。
下圖是我在項目中的代碼部分截取,做爲參考: