以下代码将帮助您在服务器上创建pdf/excel文件,并允许通过ajax调用在浏览器中下载。
创建pdf/excel文件的
控制器
public async Task<JsonResult> CardStatusReportExport(ReportFilterInputModel cardStatusReportInputModel, string type, string sortOrder)
{
cardStatusReportInputModel.ReportType = Reprot_Type_Const.CardStatus;
cardStatusReportInputModel.ReportFormat = type;
var CardStatusReport = await _reportDocGeneration.DocGeneartion(cardStatusReportInputModel);
string result = Path.GetTempPath();
string fileName = "CardStatusReport" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
if (type.Equals(Constants.FILE_TYPE_PDF))
{
fileName = fileName + Constants.FILE_EXTENSION_PDF;
System.IO.File.WriteAllBytes(result + fileName, CardStatusReport);
}
else
{
fileName = fileName + Constants.FILE_EXTENSION_EXCEL;
System.IO.File.WriteAllBytes(result + fileName, CardStatusReport);
}
return Json(new { fileName = fileName});
}
以下控制器代码将允许通过单个 AJAX 调用下载创建的文件。
[HttpGet]
public async Task<ActionResult> Download(string file)
{
var path = Path.Combine(Path.GetTempPath(),file);
var memory = new MemoryStream();
try
{
using (var stream = new FileStream(path, FileMode.Open))
{
await stream.CopyToAsync(memory);
}
}
catch (Exception e)
{
ModelState.AddModelError("FileNotFoundError", e.Message);
return Content(e.Message);
}
memory.Position = 0;
return File(memory, GetContentType(path), Path.GetFileName(path));
}
private string GetContentType(string path)
{
var types = MediaType.GetMimeTypes();
var ext = Path.GetExtension(path).ToLowerInvariant();
return types[ext];
}
使用以下
ajax 调用来创建 pdf/excel 文件并下载相应文件。
$.ajax({
method: 'POST',
data: { type: val, cardStatusReportInputModel: payload, sortOrder : sortOrder},
url: '@Url.Action("CardStatusReportExport", "Reports")'
}).done(function (data, statusText, xhdr) {
try {
if (data.fileName != "") {
window.location.href = "@Url.RouteUrl(new { Controller = "Reports", Action = "Download"})/?file=" + data.fileName;
ShowMessageAlert('@Html.Raw(Localizer["Report has been exported successfully"].Value.ToString())');
}
$("#divLoader").hide();
}
catch (e) {
$("#divLoader").hide();
}
}).fail(function (xhdr, statusText, errorText) {
alert('error');
$("#divLoader").hide();
});