В настоящее время я использую .NET и платформу ServiceStack для разработки своей серверной части. Мой друг использует Angular и размещен на сервере IIS. Платформа Service Stack предоставляет функцию, с помощью которой вы можете получить доступ к загруженному файлу из Request!.Files.
Предположим, пользователь загружает файл размером около 30 ГБ и получает к нему доступ из Request!, тогда мой порядок действий следующий:
доступ к файлу -> сканирование файла на наличие антивируса -> одновременное чтение файла, сохранение в этом месте и вычисление хэша md5 для подтверждения того, что файл тот же ->, если не тот же самый, то очистить все сохраненные файлы.
Код: Выделить всё
for (int i = 0; i < Request!.Files.Length; i++)
{
var uploadedFile = Request.Files[i];
var metadata = request.Documents![i];
try
{
_logger.LogDebug("Processing file {Index}/{Total}: {FileName}", i + 1, Request.Files.Length, uploadedFile.FileName);
var inputStream = uploadedFile.InputStream;
var scanResult = await _antivirusScanner.ScanAsync(inputStream, uploadedFile.FileName);
switch (scanResult.Status) .....
inputStream.Position = 0;
}
}
Код: Выделить всё
using var md5 = MD5.Create();
await using (var outputStream = File.Create(destination))
await using (var cryptoStream = new CryptoStream(
outputStream, md5,
CryptoStreamMode.Write))
{
await inputStream.CopyToAsync(cryptoStream);
await cryptoStream.FlushAsync();
}
var computedHash = Convert.ToHexString(md5.Hash!);
if (!string.Equals(computedHash, metadata.DocMd5, StringComparison.OrdinalIgnoreCase))
{
// ....
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... ding-files
Мобильная версия