Чтение потока дважды?
Когда я загрузил изображение с моего сайта, мне нужно сделать 2 вещи:
- прочитать размеры изображения
- сохранить изображение в базе данных
первое, что я делаю, это чтение потока изображения в объект Image, например:
var file = Request.Files["logo"];
Image FullsizeImage = Image.FromStream(file.InputStream);
следующая вещь, которую я делаю, - сохранить объект "файл" в базе данных (LINQ to SQL). НО, когда я пытаюсь сохранить изображение в базе данных, поток из файла имеет его размещение в конце потока, и кажется, что нет данных.
Я знаю, что должен как-то reset поток и вернуть его в положение 0, но как я могу сделать это наиболее эффективным и правильным способом?
Ответы
Ответ 1
Ну, самый простой способ:
file.InputStream.Position = 0;
... если поток поддерживает поиск. Тем не менее, это может сделать интересные вещи для Image
, если вы не будете осторожны, потому что он сохранит ссылку на поток.
Вам может быть лучше загружать данные в массив байтов, а затем создать из него два отдельных объекта MemoryStream
, если вам все еще нужно. Если вы используете .NET 4, легко скопировать один поток в другой:
MemoryStream ms = new MemoryStream();
Request.Files["logo"].InputStream.CopyTo(ms);
byte[] data = ms.ToArray();