使用MVC将文件发送到VirusTotal

时间:2016-07-01 08:18:16

标签: c# asp.net-mvc virus-scanning

我是一名学生正在尝试另一个迷你项目,用户可以将CSV文件上传到网络服务器。但在我创建另一个程序来执行该文件之前,我想将文件发送到virustotal以检查病毒。

我尝试了但是我收到了一个错误:"无法转换为' string'到' 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>

请帮帮我谢谢

2 个答案:

答案 0 :(得分:1)

如果我是正确的,您可以使用代码VirusTotal.NET

中的此库

然后,如果查看他们的文档,您会注意到ScanFile方法需要FileInfo类型的对象并返回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扫描之前保存它可能会触发已安装的防病毒软件的操作。因此,您可能应该在防病毒配置中排除一个临时文件夹,将文件保存在那里,然后(成功扫描后)将文件移动到正确的目标文件夹(或者在出现问题时从临时文件夹中删除文件)。 / p>

答案 1 :(得分:1)

我认为您需要查看virus total的文档和API,以便在您的迷你项目中实现上传功能。