开发者工具
虚拟文件生成器
在浏览器中生成图片、音频、视频、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 |
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 中快速提取单个文件的原因。