C# 虚拟上载的文件总数为零字节

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) {

我正在尝试使用.Net Core将文件上载到VirusTotal。但是上载的文件大小为零字节。为什么会发生这种情况

[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,如果它被插入到报告行之前,它应该会像你预期的那样工作。。。