2013-05-31 26 views
1

有人可以幫助我,我只是無法弄清楚什麼是錯的。mvc 3在新窗口中打開上傳的文件

方案:員工可以上傳文件(doc,docx或pdf)。這些文件顯示在一個表格中。當他們點擊名稱時,文件應該在新窗口中打開。

現在我可以上傳一個文件。該文件保存在上傳文件夾和數據庫中。上傳的文件顯示在一個表格中,但是當我單擊文件的名稱時,文件將被下載而不是在新窗口中打開。我嘗試了幾件事,但我總是得到相同的結果。

我將包括控制器和下一個視圖。

控制器:

//To view the files in a table. 
public ActionResult ShowUploadedFiles() 
{ 
    return View(db.UploadedFiles.ToList()); 
} 
//To open a file 
public ActionResult OpenFile(string fileName) 
{ 
    var fs = System.IO.File.OpenRead(Server.MapPath("~/Uploads/" + fileName)); 
    return File(fs, "application/pdf", fileName); 
} 

查看

@foreach (var file in Model) 
{ 
    <tr> 
     <td>@Html.DisplayFor(f => file.FileDate)</td> 
     <td>@Html.DisplayFor(f => file.Employee.FullName)</td> 
     <td><a href="/Uploads/@file.FileName" target="_blank">@file.FileName</a></td> 
     <td>@Html.DisplayFor(f => file.FileName)</td> 
     <td>@(file.FileSize/1000)kb</td> 
     <td><a href="@Url.Action("OpenFile", new { fileName=file.FileName})" target=_blank>@file.FileName</a></td>    
    </tr> 
} 

第一HREF 「作品」。當我點擊它時,pdf會在新窗口中打開,但docx文件已下載。當我在新窗口中自己輸入網址時,我得到了相同的結果(pdf已打開,docx已下載)。當我點擊第二個href時,兩個文件都被下載了。

有什麼不對嗎,還是因爲我在Chrome中這樣做? (我剛剛在資源管理器9中檢查過,結果相同)

+0

謝謝大家的意見!在這種情況下,我會選擇只接受pdf,並讓他們選擇查看或下載文件 –

回答

0

它是預期的瀏覽器行爲。

  • 在您的第一個href中,您在_blank窗口中打開。所有的瀏覽器本身都支持pdf內容類型,因此在窗口本身打開pdf。
  • 第二個href寫入響應輸出。基本上你是在告訴瀏覽器爲我下載這些東西。

,如果你想顯示在窗口本身的文件,然後在你的迴應內容部署頭。更多信息請參考這個答案Returning_file_in_Asp.net mvc3

var cd = new System.Net.Mime.ContentDisposition 
    { 
     FileName = yourfilename, 

     // always prompt the user for downloading, set to true if you want 
     // the browser to try to show the file inline 
     Inline = true, 
    }; 
    Response.AppendHeader("Content-Disposition", cd.ToString()); 
0

我認爲PDF文件打開,因爲大多數新的瀏覽器有一個blugin「恩。 Adobe Reader閱讀或呈現PDF文件,但DOCX文件無法直接打開PDF格式,您必須找到一個工具來呈現您的DOCX文件。

0

爲什麼PDFS在瀏覽器在你第一次打開的href究其原因,是因爲大多數瀏覽器都有一個內置的PDF閱讀器,而對於辦公室文件,你就必須安裝外部插件,以便允許查看在瀏覽器中。

見:http://bit.ly/ZiwpCw(Chrome瀏覽器)

在第二個HREF,你鏈接到其直接返回文件的操作,所以瀏覽器把它看作一個下載,而不是你試圖查看它在另一個窗口。