sql-server - 如何将图像发送到Web服务 Node js,然后使用此图像参数执行存储过程

标签 sql-server node.js stored-procedures http-request-parameters

我是 Node js新手。我在 SQL Server 中编写了以下存储过程:

CREATE PROCEDURE [dbo].[SP_ADDMESSAGE]
    @PhoneNumber nvarchar(50),
    @Type numeric(18,0),
    @Image Image=null,
    @MessageContent nvarchar(255)=null
AS
BEGIN
    insert Message([PhoneNumber],[Type],[Image],[MessageContent])
    values(@PhoneNumber,@Type,@Image,@MessageContent)
    RETURN 1
END

我的 NodeJS Web 服务:

app.post('/message/add',function(req,res){
    sql.close();
    // connect to your database
    sql.connect(config, function (err) {
        if (err) 
            console.log(err);

        var request = new sql.Request();
        request.input('PhoneNumber',sql.NVarChar(50),req.query.phoneNumber);
        request.input('Type',sql.Numeric,req.query.type);
        //request.input('Image',sql.Image,req.query.image);
        //How to add image into SP???
        request.input('MessageContent',sql.NVarChar(225),req.query.messageContent);
        request.execute('SP_ADDMESSAGE').then(function(err,recordset,returnValue,affect){
            console.dir(recordset); 
            console.dir(err);
        }).catch(function(err) {
            console.log(err);
        });
    });
});

但是我不知道如何在android中将带有图像的http请求POST(或在Firefox中使用Postman应用程序或HttpRequester)发送到此Web服务,以及如何将图像添加到存储过程中的参数中来执行。

最佳答案

通常,二进制数据(例如图像)不会存储在数据库中。该级别的存储非常昂贵(相对而言),并且不适合此类用途。

相反,图像作为重命名(无扩展名)文件存储在文件系统上,并在数据库中给出唯一的记录来表示它们。

该记录通常有:

  • 唯一生成的 ID 或 uuid
  • 文件类型
  • 文件名
  • 文件大小
  • 上传日期
  • 等等

有些应用程序会在此时优化图像,因为让我们面对现实吧,现在的相机非常好而且文件很大(我强烈推荐这样做)。

要将“图像”返回到应用程序,您可以使用我刚才提到的数据库记录中的唯一标识符生成一个 URL。这将对应于应用程序中的路径或外部 CDN url(如果您选择了该方向)。谈论“应用内”方法。该应用程序将根据 url (yoursite.com/images/1) 中提供的键查找记录,随后从存储的位置获取二进制数据并使用图形库渲染它(nodejs 有一个我之前使用过的 GD library 版本)。

关于sql-server - 如何将图像发送到Web服务 Node js,然后使用此图像参数执行存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44776282/

相关文章:

SQL Server XQuery.修改 "Syntax error near ' :', expected ' }'"

javascript - 当我使用 axios POST 时,Req.body 为空,但当我使用 'request' 时,它工作正常

MySQL存储过程如果存在

node.js - 从 .desktop 文件运行 Node

javascript - Strapi 上传的文件未显示在网站上

database - PL/SQL模拟表单POST

sql - SQL存储过程删除重复记录,保留一个

mysql - 定期拉取后在记录中添加时间戳

SQL:添加不同年份缺失的月份

sql-server - 来自其他租户的应用程序的 Azure SQL AAD 身份验证