Skip to content

错误码参考

file-UD 所有错误均通过 FileUDError 类抛出,包含错误码、级别、上下文和选项信息。

ErrorCode 枚举

通用错误(1000-1999)

错误码常量名中文描述错误级别
1000UNKNOWN未知错误error
1001ABORTED操作已中止error
1002TIMEOUT请求超时error
1003NETWORK网络错误error

文件验证错误(2000-2999)

错误码常量名中文描述错误级别
2000FILE_TOO_LARGE文件过大warn
2001FILE_TOO_SMALL文件过小warn
2002INVALID_TYPE文件类型无效warn
2003FILE_LIMIT_EXCEEDED文件数量超限warn
2004DUPLICATE_FILE重复的文件warn
2005FILE_EMPTY文件为空warn
2006FILE_CORRUPTED文件已损坏warn
2007FILE_TOO_EMPTY文件内容不完整warn

图片验证错误(2100-2199)

错误码常量名中文描述错误级别
2100IMAGE_WIDTH_INVALID图片宽度不符合要求warn
2101IMAGE_HEIGHT_INVALID图片高度不符合要求warn
2102IMAGE_ASPECT_RATIO_INVALID图片宽高比不符合要求warn
2103IMAGE_RESOLUTION_INVALID图片分辨率不符合要求warn
2104IMAGE_NOT_SQUARE图片不是正方形warn
2105IMAGE_ANIMATED不支持动态图片warn

视频验证错误(2200-2299)

错误码常量名中文描述错误级别
2200VIDEO_DURATION_INVALID视频时长不符合要求warn
2201VIDEO_WIDTH_INVALID视频宽度不符合要求warn
2202VIDEO_HEIGHT_INVALID视频高度不符合要求warn
2203VIDEO_BITRATE_INVALID视频比特率不符合要求warn
2204VIDEO_CODEC_INVALID视频编码格式不支持warn

上传错误(3000-3999)

错误码常量名中文描述错误级别
3000UPLOAD_FAILED上传失败error
3001CHUNK_UPLOAD_FAILED分片上传失败error
3002MERGE_FAILED合并分片失败error
3003SERVER_ERROR服务器错误error
3004UNAUTHORIZED未授权访问error
3005FORBIDDEN禁止访问error
3006NOT_FOUND资源不存在error

下载错误(4000-4999)

错误码常量名中文描述错误级别
4000DOWNLOAD_FAILED下载失败critical
4001CHUNK_DOWNLOAD_FAILED分片下载失败critical

插件错误(5000-5999)

错误码常量名中文描述错误级别
5000PLUGIN_ERROR插件错误critical
5001PLUGIN_INIT_FAILED插件初始化失败critical
5002PLUGIN_EXECUTION_FAILED插件执行失败critical

ErrorLevel 错误级别

级别说明
info"info"提示信息,不影响流程
warn"warn"警告,但继续执行(文件验证类)
error"error"错误,中断当前操作
critical"critical"致命错误,整个实例不可用

FileUDError 类

typescript
class FileUDError extends Error {
  code: ErrorCode;            // 错误码
  level: ErrorLevel;          // 错误级别
  context: ErrorContext;      // 错误上下文
  options: ErrorOptions;      // 错误选项
  cause?: Error;              // 原始错误
}

方法

方法说明
toJSON()转为 JSON 对象
getChineseDescription(code?)获取错误码中文描述
setCode(code)设置错误码
setMessage(message)设置错误消息
setContext(context)设置上下文
setOptions(options)设置选项

ErrorContext 错误上下文

typescript
interface ErrorContext {
  timestamp?: number;      // 发生时间
  plugin?: string;         // 插件名称
  uploader?: Uploader;     // 上传器实例
  fileName?: string;       // 文件名
  fileSize?: number;       // 文件大小(字节)
  chunkIndex?: number;     // 分片索引
  httpStatus?: number;     // HTTP 状态码
  retryCount?: number;     // 重试次数
  originalError?: any;     // 原始错误
  options?: Record<string, any>;  // 参数选项
}

ErrorOptions 错误选项

typescript
interface ErrorOptions {
  recoverable?: boolean;   // 是否可恢复(默认 true)
  retryable?: boolean;     // 是否自动重试(默认 false)
  suggestion?: string;     // 建议操作
  userVisible?: boolean;   // 是否显示给用户(默认 true)
  i18nKey?: string;        // 国际化 key
}

使用示例

监听错误

typescript
import { ErrorCode } from "@file-ud.js/core";

// 通过事件监听
uploader.on("error", (error) => {
  console.log(`错误码: ${error.code}`);          // 3000
  console.log(`错误级别: ${error.level}`);        // "error"
  console.log(`错误消息: ${error.message}`);      // "文件 xxx 上传失败 (500)"
  console.log(`上下文:`, error.context);          // { fileName, httpStatus, ... }
  console.log(`是否可重试: ${error.options.retryable}`); // true
});

// 通过 onError 回调
uploader.onError = (error) => {
  switch (error.code) {
    case ErrorCode.FILE_TOO_LARGE:
      alert("文件太大,请选择更小的文件");
      break;
    case ErrorCode.NETWORK:
      alert("网络连接失败,请检查网络后重试");
      break;
    case ErrorCode.UPLOAD_FAILED:
      alert(`上传失败: ${error.context.fileName}`);
      break;
  }
};

错误级别处理策略

typescript
import { ErrorLevel } from "@file-ud.js/core";

uploader.onError = (error) => {
  switch (error.level) {
    case ErrorLevel.INFO:
      // 提示信息,不处理
      console.info(error.message);
      break;
    case ErrorLevel.WARNING:
      // 警告,给用户 toast 提示但不中断
      showToast(error.message, "warning");
      break;
    case ErrorLevel.ERROR:
      // 错误,中断当前操作,提示用户
      showToast(error.message, "error");
      if (error.options.retryable) {
        // 可重试,给用户重试按钮
        showRetryButton();
      }
      break;
    case ErrorLevel.CRITICAL:
      // 致命错误,禁用整个上传器
      showModal(error.message);
      uploader.cancelAll();
      break;
  }
};

基于 MIT 协议发布