2012-06-19 2 views
7

У меня есть приложение MVC. Мне нужно открыть pdf-файл, когда пользователь нажимает кнопку открытия на странице. Путь к файлу, в котором хранится pdf, считывается из базы данных и является файлом на c :. Как открыть его в моем html-коде? У меня есть этот код:ASP.NET MVC открыть pdf файл в новом окне

<a href="@Model.CertificatePath" target="_blank" class="button3">Open</a> 

но это не открывает мой файл. Что мне нужно сделать? Мне нужно указать где-то, что это pdf?

ответ

10

Вам необходимо указать путь к действию, которое получит имя файла, разрешит полный путь и затем передаст файл на диск с сервера клиенту. К счастью, клиенты в Интернете не могут читать файлы непосредственно из файловой системы вашего сервера (если ... вы не предлагаете @Model.CertificatePath - путь к файлу на удаленном компьютере пользователя?).

public ActionResult Download(string fileName) 
{ 
    string path = Path.Combine(@"C:\path\to\files", fileName); 

    return File(path, "application/pdf"); 

} 

Update

Если @Model.CertificatePath местоположение на реальной машине клиента, попробуйте:

<a href="file://@Model.CertificatePath" target="_blank" class="button3">Open</a> 

Обратите внимание, что некоторые браузеры могут иметь параметры безопасности запрещая вас от открытия локальных файлов.

+0

Где я могу решить путь и как я могу передать поток? Теперь я получаю сообщение: Firefox не знает, как открыть этот адрес, потому что протокол (c) не связан ни с одной программой. – Tulips

+0

Да, @ Model.CertificatePath - это фактический путь и является правильным местом. Итак, я думал, что могу просто открыть его? – Tulips

+0

Он говорит о недопустимых символах в пути, когда я набрал то, что вы предложили – Tulips

0

К сожалению, вы не можете определять, где будет открыт PDF-файл, главным образом потому, что вы не можете гарантировать, что плагин для чтения Adobe Acrobat установлен или как он функционирует.

Вы можете теоретически открыть новое окно, и в этом новом окне есть функция JavaScript, чтобы открыть файл PDF, но опять же вы не можете гарантировать, что он откроется во встроенном окне без плагина, лучше всего надеюсь, что это «лучшая попытка».

+0

Да .. Я знаю, что в нем есть PDF-плагин. Поэтому я хотел бы попробовать. Как я могу это сделать? Мой браузер говорит – Tulips

+0

Firefox не знает, как открыть этот адрес, потому что протокол (c) не связан ни с одной программой. – Tulips

0

Возможно, у вас есть ссылка на способ огня, такой как тот, который ниже будет передавать ваш выбранный файл на загрузку файла, а не открывать PDF-файл в брошюре.

/// <summary> 
/// Forces a file to be displayed to the user for download. 
/// </summary> 
/// <param name="virtualPath"></param> 
/// <param name="fileName"></param> 
public static void ForceDownload(string virtualPath, string fileName) 
{ 
    HttpResponse response = HttpContext.Current.Response; 
    response.Clear(); 
    response.AddHeader("content-disposition", "attachment; filename=" + fileName); 
    response.WriteFile(virtualPath); 
    response.ContentType = ""; 
    response.End(); 
} 
5

Попробуйте, как это в вашем View

@Html.ActionLink("View", "ViewPDF", new { target = "_blank" }) 

Теперь ссылка откроется в новом окне. Вы можете написать байты pdf в методе контроллера ViewPDF

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