file2Json / json2Blob / toBase64
file2Json、json2Blob 和 toBase64 三个函数用于在文件、Blob、字符串与 Base64 之间进行格式转换。
语法
javascript
file2Json(file)
json2Blob(jsonObject)
toBase64(str)参数
file2Json
fileFile | Blob- 要读取的 File 或 Blob 对象。
json2Blob
jsonObjectstring- JSON 字符串,将被包装为 Blob 对象。
toBase64
strstring- 需要编码为 Base64 的字符串。
返回值
file2JsonPromise<string> - 返回文件内容的文本字符串。json2BlobBlob - 返回包装后的 Blob 对象。toBase64string - 返回 Base64 编码后的字符串。
描述
file2Json 内部使用 FileReader 的 readAsText 方法将 File/Blob 以文本形式读取,在 onload 回调中通过 Promise.resolve 返回结果。注意返回的是字符串,若需对象需自行 JSON.parse。
json2Blob 通过 new Blob([jsonObject]) 将字符串包装为 Blob 对象,未指定 MIME 类型,默认为空字符串。若需要明确类型可在外部处理或后续扩展。
toBase64 先使用 encodeURI 对字符串进行 URI 编码(处理中文等非 ASCII 字符),再使用 btoa 转换为 Base64 字符串。这种先 encodeURI 后 btoa 的方式可避免中文等字符直接 btoa 时抛出 InvalidCharacterError。
注意事项
file2Json返回的是字符串而非对象,若需 JSON 对象请使用JSON.parse转换,或直接使用chooseJsonObj。json2Blob接收的是字符串而非对象,若直接传入对象会被toString转为'[object Object]',请先JSON.stringify。toBase64的解码需对应使用decodeURIComponent(atob(base64)),否则直接atob会得到编码后的字符串。toBase64依赖btoa,仅支持 Latin1 字符,函数已通过encodeURI将非 ASCII 字符转为%XX形式以兼容中文。file2Json仅监听onload,未处理onerror,若读取异常 Promise 不会 resolve,建议对异常文件提前校验。
示例
file2Json 读取文件为字符串
json2Blob 将字符串转为 Blob
toBase64 编码字符串
浏览器兼容性
- 三个函数均依赖浏览器 API,只能在浏览器环境中使用。
file2Json使用的FileReader在 IE10+ 及所有现代浏览器中可用。json2Blob使用的Blob构造函数在 IE10+ 及所有现代浏览器中可用。toBase64使用的btoa与encodeURI为标准 API,在所有现代浏览器中可用。
性能考虑
- 时间复杂度:
json2Blob与toBase64为 O(n),n 为输入字符串长度;file2Json为异步操作,耗时取决于文件大小。 - 大文件读取:
file2Json使用readAsText读取整个文件到内存,不适合读取超大文件,建议大文件分片处理。 toBase64的encodeURI和btoa均为同步操作,处理超长字符串可能阻塞主线程。
相关函数
downloadBlob / downloadText / downloadByUrl- 文件下载requestFile / requestJSON- 通过请求从服务器读取文件chooseJsonObj- 选择本地 json 文件后直接返回 json 对象(内部调用file2Json)chooseFile- 通过文件资源管理器选择本地文件