【发布时间】:2018-04-15 04:57:47
【问题描述】:
我正在接收从 Ajax 请求发送的图像文件:
var data = canvas.toDataURL('image/jpg', 1.0);
$.post({
url: "/upload-image",
data: {
file: data
}
}).done(function(response) {
....
})
}
在服务器端,我想将图像文件传输到 API
function getOptions(buffer) {
return {
url: '.../face_detection',
headers: headers,
method: 'POST',
formData: {
filename: buffer
}
}
}
router.post('/upload-image', function(req, res, next) {
console.log('LOG 0' + Date.now());
var data_url = req.body.file;
var matches = data_url.match(/^data:.+\/(.+);base64,(.*)$/);
var ext = matches[1];
var base64_data = matches[2];
var buffer = new Buffer(base64_data, 'base64');
console.log('LOG 1' + Date.now());
request(getOptions(buffer), function(error, response, body) {
res.json(body);
console.log(Date.now());
});
});
我遇到的问题是 LOG 0 和 LOG 1 之间的线路非常慢,只有几秒钟。但是图像只有650kb。有没有办法加快这一进程?
使用另一种方法读取header,避开缓冲区,改变上传过程。我不知道,但我想更快。
非常感谢。
【问题讨论】:
-
您能看到实际花费最多的时间吗?是 RegEx 还是 Buffer 创建?如果是 Buffer 创建,测试一下
Buffer.from()是否性能更高。另外,尝试在production mode 中运行 node.js。 -
它是慢的正则表达式......我应该搜索它
-
那我试试这个模块,看看你能不能加快速度。查看它的来源以获得一些想法:data-uri-to-buffer.
-
这解决了我的问题,非常感谢。但我不知道如何检索文件的扩展名。我让你回答这个问题:)
-
看我的回答。我添加了一个示例,说明如何使用上面链接的模块以及如何查找扩展名/MIME。