Подтвердить что ты не робот

Stream.CopyTo - файл пуст. asp.net

Я сохраняю загруженное изображение с помощью этого кода:

using (var fileStream = File.Create(savePath))
{
   stream.CopyTo(fileStream);
}

Когда изображение сохраняется в папке назначения, оно пустое, 0 kb. Что тут может быть неправильно? Я проверил stream.Length перед копированием и его не пустым.

4b9b3361

Ответ 1

В коде нет ничего плохого. Тот факт, что вы говорите "Я проверил stream.Length перед копированием и его не пустым", заставляет меня задаться вопросом о позиции потока перед копированием.

Если вы уже потребляли исходный поток один раз, но хотя поток не равен нулю, его позиция может быть в конце потока - поэтому копировать нечего.

Если поток доступен для поиска (который будет использоваться для MemoryStream или FileStream и многих других), попробуйте поместить

stream.Position = 0

непосредственно перед копией. Это сбрасывает позицию потока в начало, что означает, что весь поток будет скопирован вашим кодом.

Ответ 2

Эта проблема началась для меня после переноса моего проекта с .NET Core 1 на 2.2.

Я исправил эту проблему, установив Position моего файлового потока на ноль.

using (var fileStream = new FileStream(savePath, FileMode.Create))
{
    fileStream.Position = 0;
    imageFile.CopyToAsync(fileStream);
}

Ответ 3

Я бы порекомендовал поставить следующее перед CopyTo()

fileStream.Position = 0

Обязательно используйте Flush() после этого, чтобы избежать пустого файла после копирования.

fileStream.Flush()