前端:
通过ajax 利用 new FormData()来传输分片的数据流,
后端php接收
$fileD = request()->file('file'); // 分片二进制数据
$token = request()->post("token"); // 唯一标识
$chunkIndex = request()->post("index"); 分片编号
$isMerge = request()->post("type"); // 是否传送完,
$chunkCount = request()->post("chunkCount"); 总的分片
$mergeFileName = request()->post("filename"); //文件名
// 文件上传地址
$basename = Env::get('root_path') . 'public' . DIRECTORY_SEPARATOR . 'temps' . DIRECTORY_SEPARATOR.$token;
if($isMerge != 'merge') {
$fileUrl = $basename.DIRECTORY_SEPARATOR.$token."_".$chunkIndex; //分片编号
if (!file_exists($basename)){
mkdir ($basename,0777,true);
}
$newFile = fopen($fileUrl,"wb"); //打开或创建文件准备写入
fwrite($newFile,$fileD); //写入二进制流到文件
fclose($newFile); //关闭文件
}else if($isMerge == 'merge') {
$fileName = $basename.DIRECTORY_SEPARATOR.$mergeFileName;
$newFile = fopen($fileName,"wb"); //打开或创建文件准备写入
$blob = '';
for ($i= 0; $i < $chunkCount; $i++) {
$chunkFile = $basename.DIRECTORY_SEPARATOR.$token."_".$i;
$cf = fopen($chunkFile,"rb");
$cd = fread($cf,filesize($chunkFile)); //读取
fwrite($newFile,$cd); //写入二进制流到文件
fclose($cf); //关闭文件
}
fclose($newFile); //关闭文件
}
exit();
分片数据流传到后端的数据大小是对的,但是php在写入的时候,看了下文件大小只有几个字节的大小,很多数据都丢失了。所以最后合成的图片总是报损坏错误
你这if判断,明显丢了最后一次的传过来的file啊
我之前写过一个和你这个逻辑类似的demo,你可以参考下
https://github.com/jayding8/b...