Сайт загрузки мобильного приложения - PullRequest
0 голосов
/ 16 апреля 2009

У нас есть CMS, которую я создал, и она отлично работает, но теперь я хочу перенести загрузку мобильных двоичных файлов (установщика) в CMS. В настоящее время они передаются с другого сервера.

Единственное решение, которое я вижу, - это указать, какие файлы находятся в каких папках и т. Д., Как XML-документ и использовать Linq2Xml для извлечения файлов и их потоковой передачи в мобильный браузер. Я действительно не хочу использовать базу данных для этого. Я думал об обновлении порталов загрузки до MVC из-за встроенных возможностей потоковой передачи файла непосредственно в браузер, указав byte [], имя файла и mime.

Есть лучшие предложения?

1 Ответ

1 голос
/ 16 апреля 2009

Очень просто предоставлять файлы напрямую с контроллера 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...