requestFile / requestJSON
requestFile 和 requestJSON 两个函数通过 axios 请求从服务器读取文件或 JSON 数据,亦可用于读取项目内静态文件。
语法
javascript
requestFile(url, fileName)
requestJSON(url)参数
requestFile
urlstring- 文件路径,可以是远程地址或项目内静态资源路径。
fileNamestring- 文件名。可选,未传入时自动取
url以/分隔后的最后一段作为文件名。
- 文件名。可选,未传入时自动取
requestJSON
urlstring- JSON 文件路径,可以是远程地址或项目内静态资源路径。
返回值
requestFilePromise<File> - 返回封装好的 File 对象。requestJSONPromise<any> - 返回解析后的 JSON 数据(对象或数组)。
两个函数在请求失败时会以 reject(error.toString()) 的形式抛出错误字符串。
描述
requestFile 内部使用 axios 以 responseType: 'arraybuffer' 发起 GET 请求,将响应数据通过 new File([res.data], fileName) 封装为 File 对象返回。若未传入 fileName,则按 / 分割 url 取最后一段作为文件名。
requestJSON 使用 axios 以 responseType: 'json' 发起 GET 请求,直接返回 res.data(解析后的 JSON 对象)。
两个函数均可用于读取项目内静态文件(如 public 目录下的资源),也可用于请求远程地址,但远程地址需配置跨域访问。两个函数均依赖 axios。
注意事项
- 两个函数均依赖 axios,使用前需确保已安装并正确引入 axios。
- 请求远程地址需服务端配置 CORS,否则会被浏览器同源策略拦截。
requestFile使用arraybuffer接收数据,适合二进制文件(图片、压缩包等);文本文件亦可使用,但读取后需自行处理编码。requestJSON依赖服务端返回正确的Content-Type: application/json,否则可能拿到原始字符串。- 错误处理以
error.toString()抛出字符串而非 Error 对象,catch中拿到的是字符串信息。 - 未传入
fileName时自动解析逻辑不会处理查询参数,若 URL 含查询字符串建议显式传入文件名。
示例
读取项目内文件为 File 对象
读取项目内 JSON
浏览器兼容性
- 两个函数基于 axios 实现,兼容性取决于 axios 支持的浏览器范围。
File构造函数在 IE10+ 及所有现代浏览器中可用。responseType: 'arraybuffer'与responseType: 'json'在所有现代浏览器中可用。
性能考虑
- 时间复杂度: 取决于网络请求耗时与文件大小,本身无复杂计算。
- 内存占用:
requestFile会将整个文件加载到内存中(arraybuffer),不适合读取超大文件。 - 两个函数均使用 Promise 异步处理,不会阻塞主线程。
requestFile每次调用都会创建新的 File 对象,重复请求相同资源建议做缓存。
相关函数
downloadBlob / downloadText / downloadByUrl- 文件下载(downloadByUrl内部调用requestFile)file2Json / json2Blob / toBase64- 文件格式转换chooseFile- 通过文件资源管理器选择本地文件