Как я могу преобразовать мой поток (данные изображения) обратно в файл - PullRequest
0 голосов
/ 06 мая 2010

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

[OperationContract]
[WebInvoke(UriTemplate = "ReviewImage", BodyStyle = WebMessageBodyStyle.Bare, Method = "POST")]
ReviewImage UploadImage(Stream data);

Я на самом деле использую этот сервис из флэш-памяти (что довольно несущественно), который выбирает файл из файловой системы и загружает его через URL-адрес службы.

Кажется, все работает, добавление точки останова в метод UploadImage прерывает, как и ожидалось.

Если я хотел сохранить этот файл обратно на диск, это просто случай чтения этого объекта Stream в объект FileStream, который создает файл где-нибудь? Немного как это ? Когда я действительно делаю это, файл не может быть открыт как изображение. Я уверен, что мне не хватает ключевого знания здесь. Мой поток содержит только байты изображения или больше?

РЕДАКТИРОВАТЬ ПОСЛЕ ОТВЕТА НА ОТВЕТ:

Проблема заключалась в том, что flash кодирует загружаемые изображения в виде данных multipart / form, которые добавляли дополнительные данные в тело сообщения. Я использую MultipartParser , найденный здесь , чтобы получить реальное изображение и записать на диск.

Ответы [ 2 ]

1 голос
/ 06 мая 2010

Пока поток не был изменен из исходного файла, все, что вам нужно сделать, это открыть новый файловый поток и скопировать в него поток изображения (убедитесь, что вы находитесь в начале потока и убедитесь, что вы используете надежный алгоритм копирования строк, как тот, который вы связали). Это (как правило) просто так. Это может усложниться, если приложение, отправляющее вам файл, перепутается с потоком. Но есть только один способ выяснить, так ли это ...

0 голосов
/ 06 мая 2010

Я бы лично использовал класс Bitmap в пространстве имен System.Draming (необходимо также добавить ссылку на System.Drawing), чтобы обеспечить правильное кодирование.

        Bitmap bmp = new Bitmap(data);
        bmp.Save("Filename", ImageFormat.Jpeg);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...