文件可以异步下载吗?还是我做错了什么
本文关键字:错了 什么 异步 下载 文件 | 更新日期: 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 上下文中进行,因此不会提示用户输入文件。