我已经读过有关使用Ajax和iframe下载文件的信息。任何人都可以给我逐步说明如何执行此操作,或者可以知道任何教程,因为我们已经在该项目上使用了ajax,因此这似乎是最好的方法。
编辑:
好的,这是我的视图代码:
<div class="buttons">
<input type="button" value="Download File" class="button" id="downloadfile">
<script type="text/javascript">
$(function () {
$('#downloadfile').click(function (e) {
$('#downloadIframe').attr('src', '@Url.Action("DownloadFile","Invoice")' + '/Report/Invoices');
});
});
</script>
这是我的控制器:
public FileResult DownloadFile(int id)
{
byte[] fileBytes = System.IO.File.ReadAllBytes(Server.MapPath("~/Reports/Invoices/" + Table.First(x => x.ID == id).ID + ".pdf"));
string fileName = Table.First(x => x.ID == id).ID.ToString();
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Pdf, fileName);
}
public ActionResult Download(int id)
{
return AjaxResponse("Download", null);
}
我有一个Jquery
上下文菜单,用于单击a的一行JQGrid
,然后打开视图Download
,然后在视图中单击按钮,它应该script
在视图中执行并返回DownloadFile
FileResult
到控制器中,但是当我单击按钮时没有任何反应。
报告所在的文件夹: ~/Reports/Invoices
我不了解iframe,但是我通过ajax下载文件的方式仅仅是编写响应流。
[HttpGet]
[OutputCache(VaryByCustom="id")]
public void DownloadFile(int id)
{
var path = GetFilePath(id);
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment; filename=xxx");
Response.WriteFile(path);
Response.End();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句