使用 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 才能在您的迷你项目中实现上传功能。