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

使用MediaRecorder与FileSaver.js时,如何检测磁盘空间并处理保存失败?

解决方案:检测磁盘满导致的保存失败并支持重试

1. 捕获FileSaver.js的保存错误

新版FileSaver.js的saveAs()方法返回Promise,可直接通过catch()捕获保存失败的异常,其中就包含磁盘空间不足的场景。

示例代码:

// 假设recordingBlob是已录制完成的媒体Blob对象
saveAs(recordingBlob, `会议录制_${new Date().toISOString()}.webm`)
  .catch(error => {
    handleSaveError(error);
  });

2. 识别磁盘空间不足的错误类型

Chrome在磁盘满时抛出的错误会带有特征性信息或错误名,可通过以下逻辑判断:

function handleSaveError(error) {
  const isDiskFull = 
    error.message.includes('Failed, File Too Large') ||
    error.message.includes('Not enough space') ||
    error.name === 'QuotaExceededError';

  if (isDiskFull) {
    showRetryPrompt();
  } else {
    alert(`保存失败:${error.message}`);
  }
}

3. 实现重试保存功能

给用户弹出提示并提供重试选项,点击后重新触发保存逻辑:

function showRetryPrompt() {
  if (confirm('磁盘空间不足,无法保存录制文件。是否清理空间后重试?')) {
    // 复用之前的Blob对象重新保存
    saveAs(recordingBlob, `会议录制_${new Date().toISOString()}.webm`)
      .catch(handleSaveError); // 递归捕获错误,支持多次重试
  }
}

4. 可选优化:提前检测磁盘剩余空间

如果想在录制前预判空间是否足够,可使用HTTPS环境支持的StorageManager API,对比预估文件大小和剩余空间:

async function checkDiskSpace(requiredSizeInBytes) {
  if ('storage' in navigator && 'estimate' in navigator.storage) {
    const estimate = await navigator.storage.estimate();
    const remainingSpace = estimate.quota - estimate.usage;
    return remainingSpace >= requiredSizeInBytes;
  }
  // 不支持API时默认允许继续流程
  return true;
}

// 使用示例:检查是否有100MB剩余空间
const requiredSize = 100 * 1024 * 1024;
const hasEnoughSpace = await checkDiskSpace(requiredSize);
if (!hasEnoughSpace) {
  alert('磁盘剩余空间不足,请清理后再开始录制');
}

注意:该API返回的是浏览器分配的存储配额,不一定等于硬盘实际剩余空间,仅作参考。


内容的提问来源于stack exchange,提问作者Exlord

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:55:14