Stream.CopyTo - файл пуст. asp.net
Я сохраняю загруженное изображение с помощью этого кода:
using (var fileStream = File.Create(savePath))
{
stream.CopyTo(fileStream);
}
Когда изображение сохраняется в папке назначения, оно пустое, 0 kb. Что тут может быть неправильно? Я проверил stream.Length перед копированием и его не пустым.
Ответы
Ответ 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()