开发者工具

虚拟文件生成器

在浏览器中生成图片、音频、视频、PDF、文本等指定字节数的虚拟文件,用于测试上传表单的大小限制。文件内容绝不会上传到服务器。


格式

格式 扩展名 MIME 类型 规范上限 备注
文本 (TXT) .txt text/plain 实质上无限制 使用可读的重复文本填充
CSV .csv text/csv 实质上无限制 带表头的虚拟表格数据
JSON .json application/json 实质上无限制 填充在单个字符串字段中
二进制 (BIN) .bin application/octet-stream 实质上无限制 循环 0x00~0xFF 的任意字节序列
图片 (PNG) .png image/png 实质上无限制 有效的 1x1 图片 + 填充数据块
音频 (WAV) .wav audio/wav 4 GiB 静音 PCM 数据(可实际播放)
视频 (MP4) .mp4 video/mp4 实质上无限制 支持的浏览器中为真实录制,不支持时为仅结构有效的占位文件
视频 (WebM) .webm video/webm 实质上无限制 真实录制的数秒动画(仅限支持的浏览器)
PDF .pdf application/pdf 实质上无限制 有效的空白单页 PDF
ZIP .zip application/zip 4 GiB 无压缩的单条目归档

虚拟文件生成小技巧

  • 上传表单的校验逻辑通常会分别检查扩展名、MIME 类型、文件大小这三项。由于本工具生成的文件在其他方面均符合规范,因此可以单独针对大小限制进行测试。
  • "最大 10MB" 这样的限制,在不同实现中可能是 10,000,000 字节(106,也可能是 10,485,760 字节(220。单位选择器支持这两种进制,因此可以同时测试恰好达到边界值和超出 1 字节的情况。
  • Chrome 和 Edge 会直接将数据流式写入所选驱动器,因此即使是数十 GB 规模的文件也不会占用大量内存。Firefox 和 Safari 需要先在内存中组装文件,因此大小存在实际上限。
  • 在支持的浏览器中,视频(MP4/WebM)会使用浏览器内置的编码器实际录制数秒动画,因此打开后可以真正播放。除此之外的部分(占文件绝大部分的填充数据)以及其他图片、音频格式的内容均为虚拟数据。其目的仅在于测试大小、扩展名和 MIME 类型的校验逻辑。

常见问题

不会。生成过程完全在浏览器内完成,内容绝不会发送到服务器。

是的,在支持的浏览器(如 Chrome)中,会使用浏览器内置的编码器实际录制数秒动画,因此打开后即可播放。文件的大部分内容是为了精确匹配指定大小而填充的数据。MP4 在不支持录制的浏览器中会自动切换为"仅容器结构有效的占位文件",因此生成本身不会失败。WebM 仅在支持录制的浏览器中可以选择。

这两种格式记录文件大小的字段在规范上固定为 32 位(最大约 4.29 GB)。这并非我们实现上的限制,而是格式规范本身的上限。

TXT、CSV、JSON、BIN、PNG、PDF、MP4、WebM 在格式规范上没有上限,因此使用支持直接写入磁盘的最新版 Chrome 或 Edge,即可生成非常大的文件。
ツールくん

闲话 ― "有效文件"与"损坏文件"的分界线

大多数文件格式都保留了解析器"可以跳过"的区域,例如 PNG 的未知数据块、MP4 的 free box,以及 WebM 的 Void 元素等。这些区域最初就被设计为"为未来扩展保留、当前解析器应当忽略"的空间,因此即使填入无意义的数据,文件也不会因此损坏。

对于视频,我们在填充数据之前放置真实的影像,使其能够真正播放。由于自行编写编解码器的比特级编码难以保证正确性,因此改为让浏览器自身内置的编码器(MediaRecorder API)实际录制数秒的画布动画,再在其后追加填充数据。这种方式兼顾了"始终确保返回有效文件"的原则与"用户希望真正看到视频"的需求。

有趣的是,ZIP 文件只需读取末尾的"中央目录"即可获知全部内容列表。据说这一设计源自磁带时代从末尾读取的操作方式,如今这也是能够从体积巨大的 ZIP 中快速提取单个文件的原因。