C# 虚拟上载的文件总数为零字节
我正在尝试使用.Net Core将文件上载到VirusTotal。但是上载的文件大小为零字节。为什么会发生这种情况C# 虚拟上载的文件总数为零字节,c#,.net,virus-scanning,C#,.net,Virus Scanning,我正在尝试使用.Net Core将文件上载到VirusTotal。但是上载的文件大小为零字节。为什么会发生这种情况 [Route("api/[controller]")] public class ScannerController : Controller { [HttpGet] public async Task<VirusTotalNet.Results.FileReport> ScanAsync(string file_id) {
[Route("api/[controller]")]
public class ScannerController : Controller
{ [HttpGet]
public async Task<VirusTotalNet.Results.FileReport> ScanAsync(string file_id)
{
file_id = "./wwwroot/Upload/node-v12.14.1-x64.msi";
VirusTotal virusTotal = new VirusTotal("");
// virusTotal.UseTLS = true;
FileStream stream = System.IO.File.OpenRead(file_id);
byte[] fileBytes = new byte[stream.Length];
stream.Read(fileBytes, 0, fileBytes.Length);
VirusTotalNet.Results.FileReport report = await virusTotal.GetFileReportAsync(stream);
return report;
}
}
[路由(“api/[控制器]”)]
公共类扫描控制器:控制器
{[HttpGet]
公共异步任务ScanAsync(字符串文件\u id)
{
文件_id=“./wwwroot/Upload/node-v12.14.1-x64.msi”;
VirusTotal VirusTotal=新的VirusTotal(“”);
//virusTotal.UseTLS=true;
FileStream stream=System.IO.File.OpenRead(文件id);
byte[]fileBytes=新字节[stream.Length];
读取(fileBytes,0,fileBytes.Length);
VirusTotalNet.Results.FileReport=等待virusTotal.GetFileReportAsync(流);
返回报告;
}
}
您已将整个文件读入一个字节[]
,并且有一个GetFileReportAsync
重载将接受该值,因此将参数从stream
更改为fileBytes
:
VirusTotalNet.Results.FileReport=wait virusTotal.GetFileReportAsync(fileBytes);
DervişKayımbaşıoğlu建议重置溪流的位置,但结果表明所述位置不正确。以下任一项:
stream.Seek(0L,SeekOrigin.Begin);
//或
流位置=0L;
需要在调用GetFileReportAsync
之前立即执行,而不是在读取文件之后。那会有用的
但是等等,还有更多
无需将文件读入fileBytes
,这意味着无需重置位置。该流可以打开并直接传递到GetFileReportAsync
。包括适当的资源处置,整个方法如下:
[HttpGet]
公共异步任务ScanAsync(字符串文件\u id)
{
文件_id=“./wwwroot/Upload/node-v12.14.1-x64.msi”;
VirusTotal VirusTotal=新的VirusTotal(“”);
//virusTotal.UseTLS=true;
使用(FileStream stream=System.IO.File.OpenRead(File_id))
{
VirusTotalNet.Results.FileReport=等待virusTotal.GetFileReportAsync(流);
返回报告;
}
}
这允许异步读取文件和写入套接字,并且可以少量缓冲数据,这样大文件就不必完全加载到内存中。您可以尝试
stream.Seek(0,SeekOrigin.Begin)
在stream.read之前读取吗?@DervişKayımbaşıoğlu尝试过。。同样的问题再次出现在@DervişKayımbaşıoğlu,如果它被插入到报告行之前,它应该会像你预期的那样工作。。。