2017-10-20 69 views
0

我正在使用一個webgrid,並且我在其中放置了一個下載按鈕以從網格下載文件。爲什麼下載文件會拋出多重處置錯誤?

但它會拋出一個錯誤:localhost發送無效響應。 ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION

[HttpGet] 
     public ActionResult DownloadStories() 
     { 

      string filename = "saddam.png"; 
      string filepath = Server.MapPath("~/UploadedFiles/") + filename; //AppDomain.CurrentDomain.BaseDirectory + "/UploadedFiles/" + filename; 
      byte[] filedata = System.IO.File.ReadAllBytes(filepath); 
      string contentType = MimeMapping.GetMimeMapping(filepath); 

      var cd = new System.Net.Mime.ContentDisposition 
      { 
       FileName = filename, 
       Inline = true, 
      }; 

      // Response.AppendHeader("Content-Disposition", cd.ToString()); 
      Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\""); 

      return File(filedata, contentType, cd.FileName); 


     } 

查看:

WebGrid wgImages = new WebGrid(listData, rowsPerPage: 20); 
     @wgImages.GetHtml(tableStyle: "table table-condensed table-bordered table-striped table-responsive", 
     columns: wgImages.Columns(
            wgImages.Column 
            (columnName: "Image", header:"Image"), 
            wgImages.Column 
            (columnName:"Story", header: "Story"), 
            wgImages.Column 
            (columnName:"Image", header:"Download", format: (testItem)=> Html.ActionLink("Download", "DownloadStories", "Stories") 

           )) 
     ); 
    } 

我已經試過,我現在評論和不工作過的代碼。

+0

檢查[文檔】(https://msdn.microsoft.com/en-us/library/system.web.mvc.controller.file(V = VS。 118).aspx#M:System.Web.Mvc.Controller.File%28System.Byte [],System.String,System.String%29):「* fileDownloadName *參數用於生成內容處置標題。 「 - 所以*你不必自己做。 –

+0

嘗試刪除'Response.AddHeader(「Content-Disposition」,「attachment; filename = \」「+ filename +」\「」);'因爲這可能會導致重複的標題。 'cd.FileName'本身已經聲明'System.Net.Mime.ContentDisposition',它需要在客戶端的瀏覽器中發送文件。 –

+0

@TetsuyaYamamoto確定,但現在它只在瀏覽器中打開文件不下載 –

回答

0

爲什麼不能用簡單的HTML & JAVASCRIPT通過調用Ajax

1調用此funcation阿賈克斯後

[HttpPost] 
     public JsonResult DownloadStories(String someParamsIfany) 
     { 
       //do your thing 

     return Json(file,JsonRequestBehavior.AllowGet); 
     } 

2.創建一個一份IMG文件,下載文件數據&可從Html頁面下載

$.ajax({ 
      type: "POST",   
      url: '/Home/DownloadStories', 
      data: {someParamsIfany :someParamsIfany}, 
      success: function (result) { 
       DownLoadTheFile(result); 
      } 
     }); 

3現在起作用DownLoadTheFile

function DownLoadTheFile(file){ 
    var a = document.createElement('a'); 
    a.href = file.filepath ; 
    a.download = file.filename; 
    a.click(); 
}