移动应用下载网站

时间:2009-04-16 13:45:47

标签: c# asp.net-mvc

我们创建了一个CMS,它运行良好,但现在我想将移动二进制文件(安装程序)文件下载到CMS。它们目前从另一台服务器流式传输。

我能看到的唯一解决方案是将某些文件夹中的文件索引作为Xml文档,并使用Linq2Xml检索文件并将其传输到移动浏览器。我真的不想为此使用数据库。我正在考虑将下载门户升级到MVC,因为内置功能可以通过指定byte [],filename和mime将文件直接流式传输到浏览器。

有更好的建议吗?

1 个答案:

答案 0 :(得分:1)

直接从MVC控制器提供文件非常简单。这是我之前准备的,因为它是:

[RequiresAuthentication]
public ActionResult Download(int clientAreaId, string fileName)
{
    CheckRequiredFolderPermissions(clientAreaId);

    // Get the folder details for the client area
    var db = new DbDataContext();
    var clientArea = db.ClientAreas.FirstOrDefault(c => c.ID == clientAreaId);

    string decodedFileName = Server.UrlDecode(fileName);
    string virtualPath = "~/" + ConfigurationManager.AppSettings["UploadsDirectory"] + "/" + clientArea.Folder + "/" + decodedFileName;

    return new DownloadResult { VirtualPath = virtualPath, FileDownloadName = decodedFileName };
}

你可能需要做更多的工作来实际决定要传递什么文件(或者,更有可能做一些完全不同的事情),但我只是将其简化为基础知识,作为一个示例,显示有趣的返回位

DownloadResult是一个自定义的ActionResult:

public class DownloadResult : ActionResult
{
    public DownloadResult()
    {
    }

    public DownloadResult(string virtualPath)
    {
        VirtualPath = virtualPath;
    }

    public string VirtualPath { get; set; }

    public string FileDownloadName { get; set; }

    public override void ExecuteResult(ControllerContext context)
    {
        if (!String.IsNullOrEmpty(FileDownloadName))
        {
            context.HttpContext.Response.AddHeader("Content-type",
                                                   "application/force-download");
            context.HttpContext.Response.AddHeader("Content-disposition",
                                                   "attachment; filename=\"" + FileDownloadName + "\"");
        }

        string filePath = context.HttpContext.Server.MapPath(VirtualPath);
        context.HttpContext.Response.TransmitFile(filePath);
    }
}