我是 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/