在节点中使用 'request' 从 URL 下载图像作为缓冲区,然后作为 varbinary(max) 插入到 SQL 数据库
Using 'request' in node to download image from URL as buffer and then insert into SQL database as varbinary(max)
我正在使用 google/facebook/ms Oauth 对用户进行身份验证,然后给他们一个刷新令牌。然后,我使用这个长期存在的刷新令牌来请求短期访问令牌。
我遇到的问题是我的应用程序使用社交个人资料的照片显示在前端,但 URL 将在社交令牌过期后停止工作。
我正在尝试将用户的个人资料照片作为 varbinary(max) 保存到 MSSQL DB,然后使用访问令牌将其返回到前端。
到目前为止,这是我的代码:
但我不确定如何从缓冲区而不是 base64 字符串中获取二进制文件?
request.get(
{ url: req.user._json.picture, encoding: null },
function(err, res, buffer) {
res.on('close', () => {
theRes.send(buffer.toString('base64'));
return buffer.toString('base64');
knex('USERS')
.update({ photo: photo })
.where({ id: req.user.dbUserID })
.then(() => {
console.log('PHOTO UPDATED');
console.log(res);
console.log(photo);
})
.catch(err => {
console.log('ERROR ADDING PHOTO TO DATABASE');
console.log(err);
});
});
});
}
);
编辑:这与如何 return 从异步调用响应不同,我知道该怎么做并且我已经在代码示例中这样做了,你到底为什么要标记这个作为那个的副本???
它可以存储为 base64 字符串,因为它更容易处理,但最后我只是深入研究并实现了 blob 存储,因为在生产数据库中存储实际文件从来都不是一个好主意。
我正在使用 google/facebook/ms Oauth 对用户进行身份验证,然后给他们一个刷新令牌。然后,我使用这个长期存在的刷新令牌来请求短期访问令牌。
我遇到的问题是我的应用程序使用社交个人资料的照片显示在前端,但 URL 将在社交令牌过期后停止工作。
我正在尝试将用户的个人资料照片作为 varbinary(max) 保存到 MSSQL DB,然后使用访问令牌将其返回到前端。
到目前为止,这是我的代码:
但我不确定如何从缓冲区而不是 base64 字符串中获取二进制文件?
request.get(
{ url: req.user._json.picture, encoding: null },
function(err, res, buffer) {
res.on('close', () => {
theRes.send(buffer.toString('base64'));
return buffer.toString('base64');
knex('USERS')
.update({ photo: photo })
.where({ id: req.user.dbUserID })
.then(() => {
console.log('PHOTO UPDATED');
console.log(res);
console.log(photo);
})
.catch(err => {
console.log('ERROR ADDING PHOTO TO DATABASE');
console.log(err);
});
});
});
}
);
编辑:这与如何 return 从异步调用响应不同,我知道该怎么做并且我已经在代码示例中这样做了,你到底为什么要标记这个作为那个的副本???
它可以存储为 base64 字符串,因为它更容易处理,但最后我只是深入研究并实现了 blob 存储,因为在生产数据库中存储实际文件从来都不是一个好主意。