2013-11-14 58 views
13

我有網頁與對象表。從我網頁內的鏈接下載文件

我的一個對象屬性是文件路徑,該文件位於同一網絡中。我想要做的是將這個文件路徑封裝在鏈接下(例如下載),在用戶點擊這個鏈接後,文件將下載到用戶機器中。

所以我的表內:

@foreach (var item in Model) 
     {  
     <tr> 
      <th width ="150"><p><b><a href="default.asp" target="_blank">Download</a></b></p></th> 
      <td width="1000">@item.fileName</td> 
      <td width="50">@item.fileSize</td> 
      <td bgcolor="#cccccc">@item.date<td> 
     </tr> 
    } 
    </table> 

我創造了這個下載鏈接:

<th width ="150"><p><b><a href="default.asp" target="_blank">Download</a></b></p></th> 

我想這個下載鏈接來包裝我file path並點擊thie鏈接會瘦到我的控制器:

public FileResult Download(string file) 
{ 
    byte[] fileBytes = System.IO.File.ReadAllBytes(file); 
} 

我需要添加到我的代碼才能達到目的嗎?

回答

24

從您的操作中返回FileContentResult。

public FileResult Download(string file) 
{ 
    byte[] fileBytes = System.IO.File.ReadAllBytes(file); 
    var response = new FileContentResult(fileBytes, "application/octet-stream"); 
    response.FileDownloadName = "loremIpsum.pdf"; 
    return response; 
} 

和下載鏈接,

<a href="controllerName/[email protected]" target="_blank">Download</a> 

此鏈接將使GET請求與參數文件名您的下載行爲。

編輯:對於未找到的文件就可以了,

public ActionResult Download(string file) 
{ 
    if (!System.IO.File.Exists(file)) 
    { 
     return HttpNotFound(); 
    } 

    var fileBytes = System.IO.File.ReadAllBytes(file); 
    var response = new FileContentResult(fileBytes, "application/octet-stream") 
    { 
     FileDownloadName = "loremIpsum.pdf" 
    }; 
    return response; 
} 
+0

以及如何確保該控制器mothed收到我的文件路徑?我認爲需要添加什麼? – user2978444

+0

你已經有一個鏈接,可以使一個GET請求,只要把你的controllername/actionName到href屬性 – mecek

+0

我現在可以達到我的控制器的方法,但該文件是空:<日WIDTH =「150」>

Download

user2978444

0

在視圖中,寫上:

<a href="/ControllerClassName/DownloadFile?file=default.asp" target="_blank">Download</a> 

在控制器中,寫上:

public FileResult DownloadFile(string file) 
    { 
     string filename = string.Empty; 
     Stream stream = ReturnFileStream(file, out filename); //here a backend method returns Stream 
     return File(stream, "application/force-download", filename); 
    } 
0

這個例子正常工作對我來說:

public ActionResult DownloadFile(string file="") 
     { 

      file = HostingEnvironment.MapPath("~"+file); 

      string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
      var fileName = Path.GetFileName(file); 
      return File(file, contentType,fileName);  

     } 

查看:

<script> 
function SaveImg() 
{ 
    var fileName = "/upload/orders/19_1_0.png"; 
    window.location = "/basket/DownloadFile/?file=" + fileName; 
} 
</script> 
<img class="modal-content" id="modalImage" src="/upload/orders/19_1_0.png" onClick="SaveImg()">