В настоящее время я использую .net и ServiceStack Framework для разработки серверной части. Итак, мой Frotend находится на Angular и размещен на сервере IIS. Service Stack Framework предоставляет функцию, с помощью которой вы можете получить доступ к загруженному файлу из 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;
after that
remanig code for condtion and path creating
Код: Выделить всё
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 ... -uploading
Мобильная версия