上载从WriteableBitmap创建的JPEG,而不首先将其保存到用户计算机

时间:2010-11-30 20:37:58

标签: silverlight writeablebitmap

我有一个允许用户将视频上传到服务器的应用程序,部分过程是在客户端上创建缩略图图像,当用户在服务器上加载视频时,该图像将用于视频。我有一个writeablebitmap,我想转换为jpeg并上传到服务器。

是否可以在不将jpeg首先保存到用户计算机的情况下执行此操作 - 我不想要求受信任的应用程序。是否可以先将它存储在Isolatedstorage中,然后从那里上传,就好像它只是用户计算机上的另一个文件一样?

感谢 迈克尔

2 个答案:

答案 0 :(得分:2)

您必须在上传之前保存文件,但当然可以将其保存到隔离存储而不是通用文件系统。

有一个Microsoft Quickstart on Isolated Storage可以写一个图像。

  

图像名称和实际图像文件本身保存在独立存储中。图像名称保存在名为userSettings的设置中,其密钥为userImage。保存图像名称不是必需的,但为方便起见保存。图像文件保存在名为Images的目录中,并命名为UserImageFile.jpg。

OpenFile方法;

  

使用指定的共享和访问选项在指定路径打开文件。此方法返回包含文件流的IsolatedStorageFileStream对象。

您可以下载一些可以帮助您入门的代码。

答案 1 :(得分:1)

我实现了一个解决方案,允许我使用WriteableBitmap,使用FJCore将其转换为JPEG并将其写入MemoryStream并将其发送到服务器。

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

请参阅:Using FJCore to encode 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来接受流的块并将它们写入服务器上的文件。

使用HttpWebRequest调用FileUpload.ashx,MemoryStream以块的形式发送,直到到达流的末尾。

当它们在服务器上接收到字节时,它们将被写出到指定位置的文件中。

  • 迈克尔