【问题标题】:Download File from web browser to desktop from MVC5从 Web 浏览器将文件从 MVC5 下载到桌面
【发布时间】:2016-09-20 15:21:56
【问题描述】:

我有一个 MVC5 项目,它有一个允许用户从 SQL Server 下载文档的视图。此视图是一个表单页面,带有一个或多个文件输入控件,允许用户上传任何文件类型。当用户从桌面选择一个文件并将其放入输入文件框并单击提交按钮时,该文件将转换为 byte[] 类型并保存到 SQL Server 中。文件上传后,用户再次打开同一页面,控件中出现下载链接。如果用户单击它,该文件不会保存到他们的桌面上,但如果用户右键单击该链接并在新选项卡中打开它,则可以下载该文件。以下是视图页面中的以下 sn-p,允许用户从上传控件下载文件:

FillTemplateFields.cshtml

@{
     string[] fileUploadItems = @value.Split(',');
 }

@for (int k = 0; k < @fileUploadItems.Length; k++)
{
     <div id="fileContainer-@count">
     @if(fileUploadItems[k] != null){
         <input id="sub-file-@count" type="file" value="@fileUploadItems[k]" placeholder="@control.Placeholder" name="fileUpload-@count" data-sub-channel="sub-input-@count">

         @Ajax.ActionLink("Download " + @fileUploadItems[k], "DownloadFile", new { fieldID = @count, fileName = @fileUploadItems[k] }, null)
         <br />
 }
 else
 {
     <input id="sub-file-@count" type="file" value="" placeholder="@control.Placeholder" name="fileUpload-@count" data-sub-channel="sub-input-@count">
 }

 <a id="deleteControl-@count" 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" 属性添加到您的操作链接
  • 您的问题似乎已经在这里得到解答:stackoverflow.com/questions/730699/…
  • @BashkimMeka 我尝试了你的建议。我将属性 target="_blank" 添加到 actionlink 帮助程序中,单击链接,但它没有下载我要下载的文件。
  • @easuter 我按照你建议的链接,尝试了找到的方法,但我仍然无法将任何上传的文件保存到我的桌面上。

标签: c# asp.net-mvc asp.net-4.5 fileresult


【解决方案1】:

问题已解决。我通过更改“FillTemplateFields.cshtml”页面中的一行代码来修复它。

改变之前

@Ajax.ActionLink("Download " + @fileUploadItems[k], "DownloadFile", new { fieldID = @count, fileName = @fileUploadItems[k] }, null)

改动后

​​>
@Html.ActionLink("Download " + @fileUploadItems[k], "DownloadFile", new { fieldID = @count, fileName = @fileUploadItems[k] })

进行更改后,我可以将文件下载到我的桌​​面上,同时停留在找到下载链接的页面上,而无需在新选项卡中打开链接。

【讨论】:

    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多