我有一个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”,点击链接,并且没有下载我想下载的文件。 –