我有一個MVC5項目,它有一個允許用戶從SQL Server下載文檔的視圖。該視圖是一個帶有一個或多個文件輸入控件的表單頁面,允許用戶上傳任何文件類型。當用戶從桌面選擇一個文件並將其放入輸入文件框並單擊提交按鈕時,該文件將轉換爲byte []類型並保存到SQL Server中。文件上傳後,用戶再次打開相同的頁面,下載鏈接出現在控件中。如果用戶點擊它,該文件不會保存到他們的桌面上,但是如果用戶右鍵單擊該鏈接並在新選項卡中打開該文件,則可以下載該文件。下面是從視圖頁面,允許用戶從上傳控件下載文件下面的代碼片段:從MVC5下載從瀏覽器到桌面的文件
FillTemplateFields.cshtml
@{
string[] fileUploadItems = @value.Split(',');
}
@for (int k = 0; k < @fileUploadItems.Length; k++)
{
<div id="[email protected]">
@if(fileUploadItems[k] != null){
<input id="[email protected]" type="file" value="@fileUploadItems[k]" placeholder="@control.Placeholder" name="[email protected]" data-sub-channel="[email protected]">
@Ajax.ActionLink("Download " + @fileUploadItems[k], "DownloadFile", new { fieldID = @count, fileName = @fileUploadItems[k] }, null)
<br />
}
else
{
<input id="[email protected]" type="file" value="" placeholder="@control.Placeholder" name="[email protected]" data-sub-channel="[email protected]">
}
<a id="[email protected]" href="#">Delete</a>
的「fileUploadItems」對象包含保存到上傳控件文件名。 Ajax.ActionLink助手創建一個鏈接,調用「DowloadFile」方法,該方法傳遞文件的名稱和文件名,並查找保存到Sql Server上的文件:
TemplateValuesController.cs
public FileResult DownloadFile(int fieldID, string fileName)
{
tbl_FileStorage file = db.tbl_FileStorage.Where(f => f.FileName == fileName && f.TemplateFieldValuesID == fieldID).First();
return File(file.File, System.Net.Mime.MediaTypeNames.Application.Octet, file.FileName);
}
我可以成功地通過右鍵點擊下載鏈接,打開它新的標籤上下載文件,但同時保持在同一頁上,我不能下載它,我並不想流該文件在新的瀏覽器選項卡上。有人能給我解決方案嗎?謝謝。
嘗試添加一個target =「_ blank」屬性到您的動作鏈接 –
您的問題已經在這裏得到解答:http://stackoverflow.com/questions/730699/how-can-i-present-a-file-for - 從mvc控制器下載 – easuter
@BashkimMeka我嘗試了你的建議。我向actionlink助手添加了屬性target =「_ blank」,點擊鏈接,並且沒有下載我想下載的文件。 –