使用 MVC 将文件发送到 VirusTotal
Sending file to VirusTotal with MVC
我是一名学生,正在尝试另一个小型项目,用户可以在该项目中将 CSV 文件上传到 Web 服务器。但在我可以创建另一个程序来执行该文件之前,我想将该文件发送到 virustotal 以检查病毒。
我试过了,但出现错误:"cannot convert from 'string' to 'System.IO.FileInfo'"
这是我的代码:
控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using VirusTotalNET;
namespace Testing_1.Controllers
{
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
return View();
}
public ActionResult Upload(HttpPostedFileBase file)
{
string filename = file.FileName;
VirusTotal vtObj = new VirusTotal("%API KEY%");
string resID = vtObj.ScanFile(file.FileName);
string path = Server.MapPath("~/CSV/" + file.FileName);
file.SaveAs(path);
ViewBag.Path = path;
return View();
}
}
}
我在这一行收到错误:string resID = vtObj.ScanFile(file.FileName);
索引
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="File" id="file"/>
<input type="submit" value="Upload" />
}
上传
@{
ViewBag.Title = "Upload";
}
<h2>Uploaded: @ViewBag.Path</h2>
请帮帮我谢谢
如果我是正确的,你正在使用代码中的这个库 VirusTotal.NET
然后,如果您查看他们的文档,您可能会注意到 ScanFile 方法需要一个 FileInfo 类型的对象,returns 需要一个 ScanResults 类型的对象。所以这里不以任何方式包含字符串。
因此,您需要将文件保存在文件系统中的某个位置,然后创建一个 FileInfo 对象
public ActionResult Upload(HttpPostedFileBase file)
{
string filename = Server.MapPath("~/CSV/" + file.FileName);
file.SaveAs(filename);
FileInfo fi = new FileInfo(filename);
VirusTotal vtObj = new VirusTotal("%API KEY%");
ScanResults result = vtObj.ScanFile(fi);
.. ??? what to do if this is a virus ????
ViewBag.Path = filename;
return View();
}
现在这可能会对您服务器上的任何防病毒程序造成问题 运行。在 运行 VirusTotal 扫描之前保存它可能会触发您安装的防病毒软件的操作。因此,也许您应该将临时文件夹排除在防病毒配置之外,将文件保存在那里,然后(在成功扫描后)将文件移动到正确的目标文件夹(或者在出现问题时从临时文件夹中删除文件)。
我认为您需要查看 virus total 的文档和 api 才能在您的迷你项目中实现上传功能。
我是一名学生,正在尝试另一个小型项目,用户可以在该项目中将 CSV 文件上传到 Web 服务器。但在我可以创建另一个程序来执行该文件之前,我想将该文件发送到 virustotal 以检查病毒。
我试过了,但出现错误:"cannot convert from 'string' to 'System.IO.FileInfo'"
这是我的代码:
控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using VirusTotalNET;
namespace Testing_1.Controllers
{
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
return View();
}
public ActionResult Upload(HttpPostedFileBase file)
{
string filename = file.FileName;
VirusTotal vtObj = new VirusTotal("%API KEY%");
string resID = vtObj.ScanFile(file.FileName);
string path = Server.MapPath("~/CSV/" + file.FileName);
file.SaveAs(path);
ViewBag.Path = path;
return View();
}
}
}
我在这一行收到错误:string resID = vtObj.ScanFile(file.FileName);
索引
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="File" id="file"/>
<input type="submit" value="Upload" />
}
上传
@{
ViewBag.Title = "Upload";
}
<h2>Uploaded: @ViewBag.Path</h2>
请帮帮我谢谢
如果我是正确的,你正在使用代码中的这个库 VirusTotal.NET
然后,如果您查看他们的文档,您可能会注意到 ScanFile 方法需要一个 FileInfo 类型的对象,returns 需要一个 ScanResults 类型的对象。所以这里不以任何方式包含字符串。
因此,您需要将文件保存在文件系统中的某个位置,然后创建一个 FileInfo 对象
public ActionResult Upload(HttpPostedFileBase file)
{
string filename = Server.MapPath("~/CSV/" + file.FileName);
file.SaveAs(filename);
FileInfo fi = new FileInfo(filename);
VirusTotal vtObj = new VirusTotal("%API KEY%");
ScanResults result = vtObj.ScanFile(fi);
.. ??? what to do if this is a virus ????
ViewBag.Path = filename;
return View();
}
现在这可能会对您服务器上的任何防病毒程序造成问题 运行。在 运行 VirusTotal 扫描之前保存它可能会触发您安装的防病毒软件的操作。因此,也许您应该将临时文件夹排除在防病毒配置之外,将文件保存在那里,然后(在成功扫描后)将文件移动到正确的目标文件夹(或者在出现问题时从临时文件夹中删除文件)。
我认为您需要查看 virus total 的文档和 api 才能在您的迷你项目中实现上传功能。