在实际开发过程中,我们可能会遇到大文件上传的场景,在node中是如何实现的呢?如果还是用来一次性读写文件到服务器,会非常耗时耗内存,而且网络中断后还要重新上传,性能很低。那么如何实现一个高性能的上传功能呢?本文将为您一一揭晓。1.上传大文件的基本流程。前端对文件进行MD5加密,生成MD5值。该值是文件的唯一标识符,可用于验证文件的完整性。发送请求验证文件的MD5值,检查文件是否上传。如果文件已经上传,则不需要再上传;如果上传了部分文件,则上传剩余的文件块;如果还没有上传,请全部上传。判断文件块大小,拆分文件,并发调用上传接口,将文件块上传到服务器。前端上传文件分片后,请求通知后端合并文件块,整合到原文件中。二、生成文件MD5值1、什么是MD5?MD5MessageDigestAlgorithm(英文:MD5Message-DigestAlgorithm),一种应用广泛的密码哈希函数,可以生成一个128位(16字节)的哈希值(hashvalue),用于保证信息传输的完全一致。2、如何生成文件的MD5值?我使用spark-md5.js库生成文件MD5值。SparkMD5是MD5算法的快速实现,非常适合浏览器使用,因为nodejs版本可能更快。spark-md5.jslibrarygithub链接:https://github.com/satazor/js-spark-md5官网告诉我们增量式MD5在散列大数据(文件)时性能更好,先用FileReader和Blob来blockReads形式的文件,将块附加到MD5哈希,最后生成文件MD5值,同时生成过程保持低内存使用率。FileReader对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用File或Blob对象指定要读取的文件或数据。FileReader描述链接:https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader3。检查文件的MD5值。MD5值作为存放文件块的目录。目录存在也要检查MD5值,如果存在,说明文件已经全部或部分上传;如果没有,则文件尚未上传。4.分段上传5.服务端合并文件源代码。参考github链接:https://github.com/Revelation2019/node-reference文章:https://segmentfault.com/a/1190000008899001
