Node.js服务端:FileReader与Buffer.from(arrayBuffer)哪个更高效?
Node.js服务端两种文件处理方式的效率对比与正误分析
原问题代码
// 方案1 let file :File = (await formData()).get('input-png') let arrayBuffer = file.arrayBuffer() buffer = Buffer.from(arrayBuffer) // 方案2 let file :File = (await formData()).get('input-png') let reader = new FileReader(file) reader.load = function (){ const buffer = Buffer.from(reader.result) }
原结论的核心错误
原结论认为方案2效率更高,这是完全错误的,关键原因在于:
FileReader是浏览器专属API,Node.js服务端环境不存在该对象,方案2的代码在Node.js中会直接抛出ReferenceError: FileReader is not defined错误,根本无法运行。
正确分析与结论
方案1的修正与合理性
方案1存在一处异步调用的疏漏:file.arrayBuffer()是异步方法,必须添加await关键字才能正确获取结果,修正后代码如下:let file = (await formData()).get('input-png') let arrayBuffer = await file.arrayBuffer() const buffer = Buffer.from(arrayBuffer)这是Node.js服务端处理FormData文件上传的标准可行方式——Node.js中符合Web标准的File对象(如从现代框架或
form-data库解析得到的实例)支持arrayBuffer()方法,通过该方法获取ArrayBuffer后转换为Node.js原生Buffer,是符合规范的流程。方案2的不可行性
FileReader仅用于浏览器环境读取本地文件或Blob数据,服务端场景下没有对应的实现,因此方案2从根本上无法在Node.js中执行,不存在效率对比的基础。
总结
原结论完全错误,方案2在Node.js服务端无法运行;方案1修正异步问题后,是正确且可行的文件处理方式。
内容的提问来源于stack exchange,提问作者Nikhil Kumar
相关产品推荐
相关产品推荐

