0

我是一名学生,正在尝试另一个迷你项目,用户可以将 CSV 文件上传到 Web 服务器。但在我创建另一个程序来执行文件之前,我想将文件发送到 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>

请帮帮我谢谢

4

2 回答 2

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 扫描之前保存它可能会触发您安装的防病毒软件的操作。因此,也许您应该有一个被防病毒配置排除的临时文件夹,将文件保存在那里,然后(在成功扫描后)将文件移动到正确的目标文件夹(或者如果出现问题,请从临时文件夹中删除文件)。

于 2016-07-01T08:30:07.127 回答
1

我认为您需要查看病毒总数的文档和api才能在您的迷你项目中实现上传功能。

于 2016-07-01T08:37:57.420 回答