Hay*_*den 8 base64 node.js express
假设我正在使用 Node/Express 创建 REST API,并且数据通过 JSON 在客户端和服务器之间交换。
用户正在填写注册表,其中一个字段是用于上传个人资料图像的图像输入。图片无法通过 JSON 发送,因此必须转换为 Base64 字符串。
如何验证这确实是服务器端图像的 Base64 字符串?或者最好的做法是不要将个人资料图像作为 base64 发送?
您可以首先检查字符串是否是具有正确 MIME 类型的 Base64 图像。
我在 npm 注册表上发现这个库正是这样做的(未经测试)。
const isBase64 = require('is-base64');
let base64str_img = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAoHBwgHBgoIC...ljA5GC68sN8AoXT/AF7fw7//2Q==';
console.log(isBase64(base64str_img, { mime: true })); // true
Run Code Online (Sandbox Code Playgroud)
然后,您可以验证应用程序中是否允许使用 mime 类型,或者进行其他验证,例如尝试显示图像文件并捕获可能的错误。
无论如何,如果你想真正确定用户输入,你首先必须自己处理它。这是您应该关心的最佳实践。
仅当其解码数据具有正确的 MIME 类型且宽度和高度大于零时,Base64 值才是有效图像。检查这一切的一个方便方法是安装jimp包并按如下方式使用它:
var b64 = 'R0lGODdhAQADAPABAP////8AACwAAAAAAQADAAACAgxQADs=',
buf = Buffer.from(b64, 'base64');
require('jimp').read(buf).then(function (img) {
if (img.bitmap.width > 0 && img.bitmap.height > 0) {
console.log('Valid image');
} else {
console.log('Invalid image');
}
}).catch (function (err) {
console.log(err);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10237 次 |
| 最近记录: |