You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Dropzone.js分片上传大视频文件时PHP端fwrite追加失效问题排查求助

Dropzone.js分片上传大视频文件时PHP端fwrite追加失效问题排查求助

嘿,我看你遇到了Dropzone分片上传大视频时PHP端追加文件没效果的问题,这事儿我之前做分片上传的时候也踩过类似的坑,咱们来一步步揪出问题所在~

首先看你代码里最关键的错误:追加文件时用了错误的文件打开模式!

你现在用的是 "w" 模式打开文件,这个模式的作用是清空原有文件内容,然后写入新内容——也就是说,当你处理第二个分片时,你先把第一个分片创建的文件清空了,再写新的分片内容,如果后续分片上传过程中出点小问题,最后就会留下0字节的空文件。

针对二进制文件(比如视频),咱们应该用追加模式,而且要加上二进制标记,也就是 "ab" 模式:

  • a:表示追加内容到文件末尾,不会清空原有内容
  • b:表示以二进制模式操作,避免视频这类二进制文件出现编码或格式损坏

接下来给你修改后的代码,顺便加了点错误处理,避免静默失败:

$targetFile = $uploadPath . $uploadedFiles['videos']->getClientFilename();

if(file_exists($targetFile)) {
    // 用二进制追加模式打开文件
    $file = fopen($targetFile, "ab");
    if (!$file) {
        die("无法打开文件进行追加");
    }
    
    $chunkContent = $uploadedFiles['videos']->getStream()->getContents();
    $writeResult = fwrite($file, $chunkContent);
    
    if ($writeResult === false) {
        die("写入分片内容失败");
    }
    
    fclose($file);
} else {
    // 第一个分片,直接移动文件
    $uploadedFiles['videos']->moveTo($targetFile);
}

除此之外,还有几个地方可以排查下,避免其他潜在问题:

  • 检查PHP配置:确认 upload_max_filesize 和 post_max_size 的值大于你的分片大小,不然分片可能上传失败
  • 磁盘权限:确保 $uploadPath 目录有足够的写权限,服务器用户(比如www-data)能在这个目录创建和修改文件
  • 磁盘空间:目标磁盘有没有剩余空间?如果空间满了,写入操作会静默失败
  • Dropzone配置:确认Dropzone开启了分片模式(chunking: true),并且传递了正确的分片序号等参数,虽然你说顺序正确,但还是确认下有没有遗漏必要的配置项

备注:内容来源于stack exchange,提问作者user979331

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:29:33