我目前正在创建一种病毒扫描功能。
我要执行的操作:将文件上传到指定的blob存储容器时,将触发Azure功能。该功能将扫描文件中是否有病毒,如果干净,会将文件移动到另一个Blob存储容器中。
我创建了一个Azure函数,该函数在创建Blob(即上传文件)时触发,但是我不知道如何将病毒扫描集成到混合中。
我尝试使用ClamAV.js,但无法正常运行。我不确定如何安装ClamAV(守护程序),以便它可以被Azure函数使用,因此这可能是导致它不起作用的原因。另外,我不确定如何安装npm软件包(在Azure函数中),因此我不得不将实际的js文件从软件包上传到函数中,然后将其导入。不知道那是否有效...
我尝试使用AttachmentScanner,但无法在Azure函数中正常运行(更具体地说,我无法获取发送POST请求的函数)。
我面临的一个主要问题是我认为我无法解决:如何在Azure函数中使用npm包?我可以将它们安装在某个地方吗?我可以直接下载软件包并将js文件手动上传到Azure函数并以这种方式导入吗?
这是我尝试使用AttachmentScanner的尝试:
module.exports = async function (context, myBlob) {
var req = new XMLHttpRequest();
req.open( "POST", "https://beta.attachmentscanner.com/requests", false );
req.headers({
"authorization": "bearer [OMITTED]",
"content-type": "application/json"
});
req.type("json");
req.send({
"url": context.bindingData.uri //"http://www.attachmentscanner.com/eicar.com"
});
req.end(function (res) {
if (res.error) throw new Error(res.error);
context.log(req.responseText);
});
context.log("JavaScript blob trigger function processed blob \n Name:", context.bindingData.name, "\n Blob Size:", myBlob.length, "Bytes");
context.log("context");
context.log(context);
context.log("myBlob");
context.log(myBlob);
};
这会产生错误:Exception: ReferenceError: XMLHttpRequest is not defined
使用以下功能,我可以检测到斑点并打印有关它的信息:
module.exports = async function (context, myBlob) {
context.log("JavaScript blob trigger function processed blob \n Name:", context.bindingData.name, "\n Blob Size:", myBlob.length, "Bytes");
context.log("context");
context.log(context);
context.log();
context.log("myBlob");
context.log(myBlob);
};
感谢您的帮助!
答案 0 :(得分:0)
首先,我确定您无法将ClamAV安装到Azure Functions中,因此您需要创建一个Linux VM来进行安装。
接下来,您可以按照Visual Studio Code,Azure CLI,Python或Linux之类的官方快速入门教程,在Windows的本地环境中安装Azure Functions Core Tool或Linux为Node.js创建一个func项目并将其发布到Azure。
最后,这是我对您的需求的看法。您可以尝试将Azure函数与Blob触发器一起使用,以为需要扫描的Blob生成带有sas令牌的url。有一个代码示例Node.js Azure Function for generating SAS tokens
,您可以参考该代码示例知道该怎么做。然后,通过带有ClamAV.js的Node.js服务器将带有sas令牌的blob URL传递到VM中的ClamAV,以使用HTTP流对其进行扫描。
当然,您可以将ClamAV.js与Azure Functions集成,但是对于像Azure Functions这样的无服务器架构,长时间扫描一个大文件并不是一个好主意。希望对您有所帮助。