2013-11-14 6 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

Возврат FileContentВыход из вашего действия.

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> 

Эта ссылка будет сделать запрос получите в вашей загрузки действия с параметром FileName.

EDIT: для не найденных файлов вы можете,

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

я могу достигнуть теперь мой метод контроллера, но файл является недействительным: <й ширина = «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()"> 
Смежные вопросы