我是一名学生正在尝试另一个迷你项目,用户可以将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>
请帮帮我谢谢
答案 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,以便在您的迷你项目中实现上传功能。