我尝试让 Nodejs 应用程序使用 ajax 上传超过 2mb 的文件,
客户端我使用FileReader
api来保存base64,然后通过FormData
传递。
我的问题是像下面这样的服务器端代码太慢,我把 console.log
尝试找到哪一部分,当上传更大尺寸的文件时,似乎卡在正则表达式match
..
有什么建议如何改进这个吗?
https://regex101.com/r/qS2lB2/1
...
console.log(image.data_base64);
// 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvd ...
var matches = image.data_base64.match(/^data:.+\/(.+);base64,(.*)$/);
console.log('done'); // slow
var fileExtension = matches[1];
var base64 = matches[2];
var buffer = new Buffer(base64, 'base64');
...
yield Promise.resolve( filesystem().writeFile(temporaryFilePath, buffer) );
最佳答案
以防万一您出于某种原因仍想使用正则表达式,可以通过将非尾随 .+
子模式替换为适当的否定字符类(涉及更少的回溯)来提高性能。
使用
/^data:[^\/]+\/([^;]+);base64,(.*)$/
参见regex demo .
说明:
^
- 字符串开头data:
- 文字字符序列data:
[^\/]+
- 除/
之外的 1 个以上字符\/
- 文字斜杠([^;]+)
- 第 1 组:除;
之外的 1 个以上字符;base64,
- 文字字符序列;base,
(.*)
- 第 2 组:0+ 除换行符之外的任何字符$
- 字符串结尾。
关于javascript - 正则表达式匹配慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36388569/