Загрузка JPEG, созданного из WriteableBitmap, без его предварительного сохранения на компьютер пользователя

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

Можно ли сделать это, не сохраняя сначала jpeg на компьютер пользователя - я не хочу требовать доверенного приложения. Можно ли сначала сохранить его в изолированном хранилище, а затем загрузить оттуда, как если бы это просто еще один файл на компьютере пользователя?

спасибо Майкл


person MIantosca    schedule 30.11.2010    source источник


Ответы (2)


Вам нужно будет сохранить файл перед загрузкой, но, безусловно, можно сохранить его в изолированном хранилище, а не в общей файловой системе.

Существует Быстрый старт по изолированному хранилищу Microsoft, который записывает изображение.

имя изображения и сам файл изображения сохраняются в изолированном хранилище. Имя изображения сохраняется в параметре userSettings с ключом userImage. Сохранять имя изображения не требуется, но оно сохраняется для удобства. Файл изображения сохраняется в каталоге с именем Images и называется UserImageFile.jpg.

Файл _1 _ метод;

Открывает файл по указанному пути, используя указанные параметры общего доступа и доступа. Этот метод возвращает объект IsolatedStorageFileStream, содержащий поток файла.

Вы можете скачать код, который должен помочь вам начать работу.

person ChrisF    schedule 30.11.2010

Я реализовал решение, которое позволяет мне взять WriteableBitmap, преобразовать его в JPEG с помощью FJCore, записать его в MemoryStream и отправить на сервер.

FluxJpeg.Core.Encoder.JpegEncoder encoder = new FluxJpeg.Core.Encoder.JpegEncoder(img, quality, stream);

см. Использование FJCore для кодирования Silverlight WriteableBitmap

Затем я нашел отличный класс FileUploader, который я изменил, чтобы загрузить MemoryStream, избегая необходимости сначала создавать локальный файл.

ПРОИСХОЖДЕНИЕ:

public void StartUpload(FileInfo file)

ИЗМЕНЕНО:

public void StartUpload(Stream fileStream)

см .: http://www.codeproject.com/KB/silverlight/SL4FileUploadAnd_VM.aspx / а>

На сервере я использовал FileUpload.ashx, описанный в приведенной выше ссылке, чтобы принимать фрагменты потока и записывать их в файл на сервере.

Вызывая FileUpload.ashx с помощью HttpWebRequest, MemoryStream отправляется фрагментами до тех пор, пока не будет достигнут конец потока.

По мере получения байтов на сервере они записываются в файл в указанном месте.

  • Майкл
person MIantosca    schedule 15.01.2011