我有一个允许用户将视频上传到服务器的应用程序,该过程的一部分是在客户端上创建一个缩略图,该缩略图将在服务器上加载时用于视频。我有一个可写的位图,我想将其转换为 jpeg 并上传到服务器。
是否可以在不先将 jpeg 保存到用户计算机的情况下执行此操作 - 我不想需要受信任的应用程序。是否可以先将其存储在隔离存储中,然后从那里上传,就好像它只是用户计算机上的另一个文件一样?
谢谢迈克尔
我有一个允许用户将视频上传到服务器的应用程序,该过程的一部分是在客户端上创建一个缩略图,该缩略图将在服务器上加载时用于视频。我有一个可写的位图,我想将其转换为 jpeg 并上传到服务器。
是否可以在不先将 jpeg 保存到用户计算机的情况下执行此操作 - 我不想需要受信任的应用程序。是否可以先将其存储在隔离存储中,然后从那里上传,就好像它只是用户计算机上的另一个文件一样?
谢谢迈克尔
您必须在上传之前保存文件,但当然可以将其保存到独立存储而不是一般文件系统。
有一个关于写入图像的独立存储的 Microsoft 快速入门。
图像名称和实际图像文件本身保存在独立存储中。图像名称保存在名为 userSettings 的设置中,键为 userImage。保存图像名称不是必需的,但为了方便而保存。图像文件保存在名为 Images 的目录中,名为 UserImageFile.jpg。
OpenFile
方法;
使用指定的共享和访问选项打开指定路径的文件。此方法返回包含文件流的 IsolatedStorageFileStream 对象。
您可以下载一些代码来帮助您入门。
我实现了一个解决方案,允许我获取 WriteableBitmap,使用 FJCore 将其转换为 JPEG 并将其写入 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_SL4_MVVM.aspx
在服务器上,我使用上面链接中描述的 FileUpload.ashx 来接受流的块并将它们写入服务器上的文件。
使用 HttpWebRequest 调用 FileUpload.ashx,MemoryStream 以块的形式向上发送,直到到达流的末尾。
当它们在服务器上接收到字节时,它们将被写出到指定位置的文件中。