Как я могу создать объект изображения из элемента управления FileUpload в asp.net? - PullRequest
0 голосов
/ 06 декабря 2009

У меня есть элемент управления FileUpload. Я пытаюсь сохранить загруженный файл (изображение), а также сохранить несколько миниатюрных копий файла.

Когда я пытаюсь что-то вроде этого:

System.Drawing.Image imgOriginal = System.Drawing.Image.FromStream (PhotoUpload.PostedFile.InputStream);

Я получаю «System.ArgumentException: параметр недействителен».

Я также пытался использовать PhotoUpload.FileBytes для создания изображения из байтов файла вместо InputStream, но возникает та же ошибка.

Загруженный файл является jpg. Я знаю, что это действительный JPG, так как он сохраняет оригинал в порядке.

Редактировать: этот код действительно работает. Недопустимый параметр был вызван тем, что PhotoUpload.PostedFile.InputStream был пустым ... что, похоже, является совершенно другой проблемой. Похоже, что после сохранения оригинала поток загрузки файла исчезает.

Редактировать: Обнаружено, что InputStream для FileUpload может быть прочитан / использован только один раз, а затем исчез.

Чтобы обойти это, я сохранил байты fileupload file в байтовый массив и использовал байтовый массив для создания копий изображения.

Код:

// Copy the FileBytes into a byte array
byte[] imageData = PhotoUpload.FileBytes;

// Create a stream from the byte array if you want to save it somewhere:
System.IO.Stream myStream = new System.IO.MemoryStream(imageData);

// Or create an image from the stream as many times as needed:
System.Drawing.Image imgOriginal = System.Drawing.Image.FromStream(myStream);

1 Ответ

2 голосов
/ 06 декабря 2009

Посмотрите по этой ссылке

ASP Net - Как передать опубликованный файл в system.drawing.image

Вот мой вызов функции:

uploadAndSizeImage (System.Drawing.Image.FromStream (UploadedFileMD.PostedFile.InputStream))

Я получаю эту ошибку:

Сведения об исключении: System.ArgumentException: неверный Используемый параметр.

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

Помогает ли это?

EDIT:

Кроме того, вы пытались вручную прочитать файл, используя что-то вроде

System.IO.FileStream fs = System.IO.File.OpenRead(@"Image.JPG");
byte[] data = new byte[fs.Length];
fs.Read(data, 0, data.Length);

System.IO.MemoryStream ms = new System.IO.MemoryStream(data);
System.Drawing.Image image = Image.FromStream(ms);

Или сохранить временную копию из FileUpload и загрузить изображение из файла?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...