gpt4 book ai didi

c# - VirusTotal 上传的文件为零字节

转载 作者:行者123 更新时间:2023-12-04 10:31:50 42 4
gpt4 key购买 nike

我正在尝试使用 .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;
}
}

最佳答案

您已将整个文件读入 byte[]并且有 GetFileReportAsync 过载这将需要,因此将参数从 stream 更改为至 fileBytes :

VirusTotalNet.Results.FileReport report = await virusTotal.GetFileReportAsync(fileBytes);

Derviş Kayımbaşıoğlu 建议重置流的位置,但事实证明提到的位置不正确。其中之一:

stream.Seek(0L, SeekOrigin.Begin);

// or

stream.Position = 0L;

需要在调用之前立即完成 GetFileReportAsync ,在读取文件之后,而不是之前。那会奏效的。

但是等等,还有更多!

无需将文件读入 fileBytes ,这意味着无需重置位置。可以打开流直接传给 GetFileReportAsync .包括适当的资源处理,整个方法变成这样:

[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;

using (FileStream stream = System.IO.File.OpenRead(file_id))
{
VirusTotalNet.Results.FileReport report = await virusTotal.GetFileReportAsync(stream);

return report;
}
}

这允许读取文件和异步写入套接字,并且可以少量缓冲数据,因此不必将大文件完全加载到内存中。

关于c# - VirusTotal 上传的文件为零字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60389053/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com