Загрузка файла JPEG, созданного с помощью WriteableBitmap, без предварительного сохранения его на компьютер пользователя. - PullRequest
1 голос
/ 30 ноября 2010

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

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

спасибо Michael

Ответы [ 2 ]

2 голосов
/ 30 ноября 2010

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

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

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

Метод OpenFile;

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

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

1 голос
/ 15 января 2011

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

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

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

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

ORIG:

public void StartUpload(FileInfo file)

ИЗМЕНЕНО:

public void StartUpload(Stream fileStream)

см .: http://www.codeproject.com/KB/silverlight/SL4FileUploadAnd_SL4_MVVM.aspx

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

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

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

  • Майкл
...