Загрузить файл в .net core 3.1 API — только половина полученного файла

#file #.net-core #upload

#файл #.net-core #загрузка

Вопрос:

У меня есть контроллер .net core 3.1 API, который получает файлы для хранения в Azure. Но все полученные файлы только «частично получены» — например, если файл изображения отправляется на контроллер — принимается только половина (или меньше) изображения.

У меня есть следующее определение контроллера:

 [HttpPost()]
 public async Task<IActionResult> Post([FromQuery] Guid documentId)
 {
        HttpContext.Request.EnableBuffering();

        var buffer = new byte[Convert.ToInt32(HttpContext.Request.ContentLength)];
        using (var stream = HttpContext.Request.Body.ReadAsync(buffer, 0, buffer.Length))
        {
                MemoryStream myStreamstream = new MemoryStream(buffer);

                myStreamstream.Position = 0;
                azureStorageHelper myStorageHelper = new azureStorageHelper();
                //helper method to get a writable BlockBlob (helper method works in other projects)
                Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob blockBlob = 
                myStorageHelper.getWriteableFileBlobFromAzure("test"   DateTime.Now.Ticks.ToString()   ".jpg");

                await blockBlob.UploadFromStreamAsync(myStreamstream).ContinueWith(
                (copyTask) =>
                {
                });
        }
}
  

Файл загружается с помощью PostMan (для тестирования) как «двоичный / выбранный файл»

Исходное изображение

Изображение, сохраненное контроллером

Комментарии:

1. Я сталкиваюсь с точно такой же проблемой. Похоже, что BlobStorage SDK загружает только буферизованную часть потока и игнорирует остальное! Вы нашли решение этой проблемы?

2. Нет, я все еще не нашел решения.

3. В итоге я сделал следующее: 1) удалите HttpContext.Request. EnableBuffering(); 2) сохраните файл в Azure 3) прочитайте файл из blobstorage, затем выполните необходимые действия.