diff --git a/Myshipping.Report/Controllers/ReportController.cs b/Myshipping.Report/Controllers/ReportController.cs index 54691884..ed1b4318 100644 --- a/Myshipping.Report/Controllers/ReportController.cs +++ b/Myshipping.Report/Controllers/ReportController.cs @@ -27,16 +27,15 @@ namespace Myshipping.Report.Controllers /// /// 生成订舱报表结果 /// - /// 模板文件路径 /// 订舱ID /// 类型,1:pdf、2:xlsx /// - [HttpGet] - public ActionResult BookingReport(string templateFile, long bookingId, int type = 1) + [HttpPost] + public ActionResult BookingReport(long bookingId, int type = 1) { var resp = new RespCommonData(); - if (System.IO.File.Exists(templateFile)) + if (Request.Files.Count > 0) { var savePath = ConfigurationManager.AppSettings["ReportFileSavePath"]; if (string.IsNullOrEmpty(savePath)) //未配置保存路径时,使用当前目录 @@ -49,9 +48,20 @@ namespace Myshipping.Report.Controllers Directory.CreateDirectory(savePath); } + var fileExt = Path.GetExtension(Request.Files[0].FileName).ToLower(); + if (fileExt != ".frx") + { + resp.Success = false; + resp.Message = $"文件类型不正确:{fileExt}"; + return Json(resp); + } + + var tmpFile = Path.Combine(savePath, $"{Guid.NewGuid()}{fileExt}"); + Request.Files[0].SaveAs(tmpFile); + //生成报表 FastReport.Report report = new FastReport.Report(); - report.Load(templateFile); + report.Load(tmpFile); foreach (FastReport.Data.JsonConnection.JsonDataSourceConnection conn in report.Dictionary.Connections) { @@ -65,21 +75,23 @@ namespace Myshipping.Report.Controllers if (type == 1) //pdf { - var saveFile = Path.Combine(savePath, $"{bookingId}_{DateTime.Now.Ticks}.pdf"); + var fileName = $"{bookingId}_{DateTime.Now.Ticks}.pdf"; + var saveFile = Path.Combine(savePath, fileName); PDFExport pdfExport = new PDFExport(); pdfExport.Export(report, saveFile); resp.Success = true; resp.Message = "生成成功"; - resp.Data = saveFile; + resp.Data = fileName; } else if (type == 2) // { - var saveFile = Path.Combine(savePath, $"{bookingId}_{DateTime.Now.Ticks}.xlsx"); + var fileName = $"{bookingId}_{DateTime.Now.Ticks}.xlsx"; + var saveFile = Path.Combine(savePath, fileName); Excel2007Export excelExport = new Excel2007Export(); excelExport.Export(report, saveFile); resp.Success = true; resp.Message = "生成成功"; - resp.Data = saveFile; + resp.Data = fileName; } else { @@ -87,15 +99,38 @@ namespace Myshipping.Report.Controllers resp.Message = "类型参数不正确"; } - return Json(resp, JsonRequestBehavior.AllowGet); + return Json(resp); } else { resp.Success = false; - resp.Message = "未找到模板文件"; + resp.Message = "未上传模板文件"; + } + + return Json(resp); + } + + /// + /// 根据文件名获取文件 + /// + /// + /// + [HttpGet] + public ActionResult GetFile(string fileName) + { + var basePath = ConfigurationManager.AppSettings["ReportFileSavePath"]; + if (string.IsNullOrEmpty(basePath)) //未配置保存路径时,使用当前目录 + { + basePath = Server.MapPath("~/ReportFiles"); + } + + var saveFile = Path.Combine(basePath, fileName); + if (System.IO.File.Exists(saveFile)) + { + return File(saveFile, "application/octet-stream", HttpUtility.UrlEncode(fileName, Encoding.GetEncoding("UTF-8"))); } - return Json(resp, JsonRequestBehavior.AllowGet); + return HttpNotFound(); }