HTML5 File API:通过PHP将Blob切片保存为文件
嘿,你的前端代码已经把切片后的Blob正确封装到FormData里了,PHP这边处理起来其实很简单,我给你写个完整的示例,再把关键点解释清楚:
PHP 处理切片Blob保存的代码
<?php // 先检查是否有合法的文件上传 if (isset($_FILES['fileUpload']) && $_FILES['fileUpload']['error'] === UPLOAD_ERR_OK) { // 提取上传文件的核心信息 $uploadedFile = $_FILES['fileUpload']; $originalFileName = $uploadedFile['name']; $tempFilePath = $uploadedFile['tmp_name']; // 定义保存切片的目录,记得提前确保这个目录存在且有写权限 $saveDir = './file_chunks/'; // 如果目录不存在,自动创建(递归创建多级目录) if (!is_dir($saveDir)) { mkdir($saveDir, 0755, true); } // 生成切片文件的保存路径,如果你需要区分不同分片,可以给文件名加后缀(比如_0, _1) // 这里先直接用原文件名,你可以根据前端传递的分片索引修改 $savePath = $saveDir . $originalFileName; // 将临时文件移动到目标目录 if (move_uploaded_file($tempFilePath, $savePath)) { echo "切片文件保存成功,路径:{$savePath}"; } else { echo "保存失败,请检查目录的写入权限"; } } else { // 处理上传错误的情况 $errorCode = $_FILES['fileUpload']['error'] ?? '未知错误'; echo "上传失败,错误码:{$errorCode}"; } ?>
关键注意事项
- 权限问题:
file_chunks目录必须有PHP进程的写入权限(一般设置0755权限即可),否则无法保存文件。 - 上传配置:如果你的切片文件比较大,需要调整PHP配置文件中的
upload_max_filesize和post_max_size参数,确保它们的值大于你的切片大小;如果上传耗时较长,还要调整max_execution_time避免超时。 - 分片合并(可选):如果你的最终目标是合并所有分片成完整文件,需要前端在上传时额外传递分片索引、总片数等信息,PHP先把每个分片保存成带索引的文件(比如
video.mp4_0),等所有分片上传完成后,再通过file_put_contents循环读取每个分片并写入到完整文件中。
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

