我有一个允许用户将视频上传到服务器的应用程序,部分过程是在客户端上创建缩略图图像,当用户在服务器上加载视频时,该图像将用于视频。我有一个writeablebitmap,我想转换为jpeg并上传到服务器。
是否可以在不将jpeg首先保存到用户计算机的情况下执行此操作 - 我不想要求受信任的应用程序。是否可以先将它存储在Isolatedstorage中,然后从那里上传,就好像它只是用户计算机上的另一个文件一样?
感谢 迈克尔
答案 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以块的形式发送,直到到达流的末尾。
当它们在服务器上接收到字节时,它们将被写出到指定位置的文件中。