首页 > 解决方案 > 在节点中使用“请求”从 URL 下载图像作为缓冲区,然后作为 varbinary(max) 插入 SQL 数据库

问题描述

我正在使用 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);
                 });
             });
          });
        }
      );

编辑:这与如何从异步调用返回响应不同,我知道该怎么做,而且我已经在代码示例中这样做了,你到底为什么要把它标记为那个的副本???

标签: javascriptnode.jssql-servernode-requestvarbinarymax

解决方案


它可以存储为 base64 字符串,因为它更易于处理,但最后我只是潜入并实现了 blob 存储,因为在生产数据库中存储实际文件从来都不是一个好主意。


推荐阅读