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

Чтение потока дважды?

Когда я загрузил изображение с моего сайта, мне нужно сделать 2 вещи:

  • прочитать размеры изображения
  • сохранить изображение в базе данных

первое, что я делаю, это чтение потока изображения в объект Image, например:

var file = Request.Files["logo"];

Image FullsizeImage = Image.FromStream(file.InputStream);

следующая вещь, которую я делаю, - сохранить объект "файл" в базе данных (LINQ to SQL). НО, когда я пытаюсь сохранить изображение в базе данных, поток из файла имеет его размещение в конце потока, и кажется, что нет данных.

Я знаю, что должен как-то reset поток и вернуть его в положение 0, но как я могу сделать это наиболее эффективным и правильным способом?

4b9b3361

Ответ 1

Ну, самый простой способ:

file.InputStream.Position = 0;

... если поток поддерживает поиск. Тем не менее, это может сделать интересные вещи для Image, если вы не будете осторожны, потому что он сохранит ссылку на поток.

Вам может быть лучше загружать данные в массив байтов, а затем создать из него два отдельных объекта MemoryStream, если вам все еще нужно. Если вы используете .NET 4, легко скопировать один поток в другой:

MemoryStream ms = new MemoryStream();
Request.Files["logo"].InputStream.CopyTo(ms);
byte[] data = ms.ToArray();