При попытке загрузить файл происходит ошибка FileBufferingReadStream.ThrowIfDisposed () - PullRequest
0 голосов
/ 27 апреля 2018

Я получаю файл изображения с типом Microsoft.AspNetCore.Http.IFormFile в контроллере.

И я загружаю этот файл в BLOB-объект Azure.

До этого я беру такой процесс, как следующий

Контроллер

[HttpPost]
public async void ActionMethod(IFormFile img)
{

    // some process        

    using(MemoryStream stream = new MemoryStream())
    {
        // (1)
        img.CopyTo(stream); // (2)
        stream.Seek(0, SeekOrigin.Begin);
        // call await cloud block blob.UploadFromStreamAsync(stream);
    }

    // some process
}

Когда проходит через using поток

поток

CanRead:    true
CanSeek:    true
CanTimeout: false
CanWrite:   true
Capacity:   0
Length:     0
Position:   0
ReadTimeout:  'stream.ReadTimeout' threw an exception of type 'System.InvalidOperationException'
WriteTimeout: 'stream.ReadTimeout' threw an exception of type 'System.InvalidOperationException'

и в точке и после нее (2) возникает следующая ошибка

System.ObjectDisposedException occurred
  HResult=0x80131622
  Message=Cannot access a disposed object
  ObjectName: 'FileBufferingReadStream'
  Source=Microsoft.AspNetCore.WebUtilities
  StackTrace:
    at Microsoft.AspNetCore.WebUtilities.FileBufferingReadStream.ThrowIfDisposed()
    at Microsoft.AspNetCore.WebUtilities.FileBufferingReadStream.set_Position(Int64 value)
    at Microsoft.AspNetCore.Http.Internal.ReferenceReadStream..ctor(Stream inner, Int64 offset, Int64 length)
   at Microsoft.AspNetCore.Http.Internal.FormFile.OpenReadStream()
   at Microsoft.AspNetCore.Http.Internal.FormFile.CopyTo(Stream target)
   at AzureStorageManager.AzureStorageFileModules.<UploadFileAsync>d__11.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()

Реальная проблема заключается в том, что указанные коды хорошо работают в некоторых ситуациях, но не в некоторых (я не могу уловить ситуацию. file всегда одинаков).

Пожалуйста, помогите мне ...

1 Ответ

0 голосов
/ 27 апреля 2018

Я изо всех сил пытаюсь решить эту проблему в течение дня, и сразу после загрузки этого вопроса я нашел решение. Проблема, из-за которой возникает эта проблема, - это возвращаемый тип метода Action. Если тип возврата не Task<T>, возникает ошибка. Поэтому я исправил свой метод действия, как

[HttpPost]
public async Task<int> ActionMethod(IFormFile img)
{
     // same

     return resultValue;
}

После этого ошибка не отображается. На самом деле я не знаю, почему точно. Поэтому, если вы знаете, скажите мне и поделитесь своими знаниями . Спасибо.

...