文件可以异步下载吗?还是我做错了什么

本文关键字:错了 什么 异步 下载 文件 | 更新日期: 2023-09-27 17:55:17

我试图弄清楚为什么我的文件下载操作不再有效。视图是

using(Ajax.BeginForm("DownloadFile",
"FileBundle",
new AjaxOptions { HttpMethod = "POST", OnSuccess = "dwnldFileCallback" }))
{
    <input name="fileName" type="hidden" id="file2Download" />
}

它呈现为

<form action="/myProject/myController/DownloadFile" data-ajax="true" data-ajax-method="POST" data-ajax-success="dwnldFileCallback" id="form1" method="post">        
     <input name="fileName" type="hidden" id="file2Download" />
</form>  

而 myController 中的 DownloadFile 函数是

[HttpPost]
public ActionResult DownloadFile ( string fileName )
{
    if (Session["isAuthenticated"] == "true")
    {
        string fullFilePath = Server.MapPath("~/Assets") + "/" + fileName;
        byte[] fileBytes = GetFile(fullFilePath);
        return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
    }
    else
    {
        return Content("Not authenticated");
    }
}

并且没有被召唤。当我的观点被召回

using (Html.BeginForm("DownloadFile",
    "FileBundle",
    FormMethod.Post,
    new { enctype = "multipart/form-data" }))
    {
        <input name="fileName" type="hidden" id="file2Download" />
    }

所以我所做的只是将其更改为异步过程。这是我能做到的吗?还是有别的问题?还是我需要发布更多代码供您查看?

文件可以异步下载吗?还是我做错了什么

确保你正确启用了不显眼的 ajax 内容:

jquery lib 必须包含在页面上:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

此外,还必须在 web.config 中的 appSettings 下设置以下键:

<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>

[编辑]但是当我考虑它时:你想向用户发布下载吗?如果这是您想要的,这将不起作用,因为通信将在 AJAX 上下文中进行,因此不会提示用户输入文件。