Silverlight以及Mvc最佳文件下载解决方案2013-11-15 博客园 JasenKin(一)前言目前,在Silverlight中下载文件通常采用两种方式进行文件下载:1、客户端 通过SaveFileDialog类进行文件下载,服务端使用字节数组(byte[])进行数据传递。2、客户端通过 访问服务端的一般处理文件(.ashx)来进行文件下载。对于第1种方式下载,缺陷主要为:点击下载之 后,弹出的SaveFileDialog对话框居然没有文件名!!!(必须自己手写文件名,这里Silverlight还有待提 高)。Silverlight中的SaveFileDialog相关属性和方法如下:
public sealed class SaveFileDialog{ public SaveFileDialog(); public string DefaultExt { get; set; } public string Filter { get; set; } public int FilterIndex { get; set; } public string SafeFileName { get; } public Stream OpenFile(); public bool? ShowDialog();}
对于第2种方式下载的话,容易暴露相关的信息(处理文件页面有时直接在地址栏显示相关的 信息)。Silverlight主要通过HtmlPage.Window.Navigate(new Uri(url));来访问一般处理文件,一 般处理文件执行文件下载(Response来执行);到目前为止,开发华为悍马项目已经半年多了,主要 以MVC和Silverlight进行开发。因此,针对于当前的项目,本人试图以Silverlight调用Mvc action来进行下 载,如下的内容都将围绕该主题进行讲解(目前这个还木有更新到项目中,仅仅是本人笔记本上设计的)。(二)相关类图以及FileDownloadResult

在MVC中,Action主要以ActionResult来作为返回结果,然后调用ActionResult的ExecuteResult() 方法来执行相关操作。然而,到目前为止关于文件操作的ActionResult主要为FileStreamResult、 FileContentResult以及FilePathResult,这些都不太方便使用(对于文件下载来说)。因此本人打算以 FileDownloadResult类来进行文件下载的相关操作。