Jeśli plik nie znajduje się wewnątrz folderów aplikacji i nie jest dostępny bezpośrednio z klienta, możliwe jest działanie kontrolera, które przesyła zawartość pliku do klienta. Można to osiągnąć poprzez zwrot FileResult
z akcji kontrolera stosując metodę File
:
public ActionResult Download()
{
string file = @"c:\someFolder\foo.xlsx";
string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
return File(file, controntType, Path.GetFileName(file));
}
a następnie zastąpić przycisk z kotwicą, wskazując na to działanie kontrolera:
@Html.ActionLink("Button 1", "Download", "SomeController")
Alternatywnie do korzystania kotwicę możesz również użyć formularza html:
@using (Html.BeginForm("Download", "SomeController", FormMethod.Post))
{
<button type="submit">Button 1</button>
}
Jeśli plik znajduje się w jakimś niedostępnym folderze klienta aplikacji, takich jak App_Data
można użyć metody MapPath
skonstruować pełną fizyczną ścieżkę dostępu do tego pliku za pomocą ścieżki względnej:
string file = HostingEnvironment.MapPath("~/App_Data/foo.xlsx");
co czy plik znajduje się na innym serwerze? powiedzmy, że nazwa serwera to "VUP-1"? i powiedzmy, że ścieżka to "c: \ someFolder \ foo.xlsx" -> na serwerze VUP-1 –