2012-06-08 2 views
3

Я следую учебнику для загрузки файла с сервера. Но есть проблемы. Я, должно быть, делаю какую-то глупую ошибку. !!Файл скачать asp.net mvc

Это ссылка, что я следую: http://haacked.com/archive/2008/05/10/writing-a-custom-file-download-action-result-for-asp.net-mvc.aspx

Это требование; Пользователь нажмет на ссылку, сайт переместит их на страницу сведений. На этой странице сведений появится ссылка для загрузки. Когда пользователь нажмет на ссылку для скачивания, файл будет загружен.

Проблема в том, что когда я нажимаю ссылку для загрузки, она не загружает исходный файл. Скорее он загружает HTML-файл. Если я нажимаю на файл HTML, он показывает мусор.

Это мой код:

Действие:

public ActionResult Download(string path,string name) 
    { 
     return new DownloadResult { VirtualPath = path, FileDownloadName = name }; 
    } 

DownloadResult класс

public class DownloadResult : ActionResult 
{ 

    public DownloadResult() 
    { 
    } 

    public DownloadResult(string virtualPath) 
    { 
     this.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-disposition", "attachment; filename=" + this.FileDownloadName); 
     } 

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

Единственное отличие от учебника, и мой код, я использую реальный путь сервера.

Любая идея ??

ответ

7

Если вам нужно отправить файл клиенту, и вы знаете путь, используйте FilePathResult:

public ActionResult Download(string path, string name) 
{ 
    return new FilePathResult(path, contentType) { 
     FileDownloadName = name 
    } 
} 

Обратите внимание, что вам нужно знать Тип содержимого. Если вы действительно не знаете, вы можете использовать application/octet-stream, что заставляет браузер рассматривать его как двоичный.

Смежные вопросы