#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, затем выполните необходимые действия.