VirusTotal 上传的文件为零字节
VirusTotal Uploaded File is Zero Bytes
我正在尝试使用 .Net 将文件上传到 VirusTotal Core.But 上传的文件大小为零 Bytes.Why 会发生这种情况吗?
[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;
}
}
这允许异步读取文件和异步写入套接字,并且可以缓冲少量数据,这样大文件就不必完全加载到内存中。
我正在尝试使用 .Net 将文件上传到 VirusTotal Core.But 上传的文件大小为零 Bytes.Why 会发生这种情况吗?
[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;
}
}
这允许异步读取文件和异步写入套接字,并且可以缓冲少量数据,这样大文件就不必完全加载到内存中。