保存由 controllerBase (.Net C#)

问题描述

这是我的方法,它将 cshtml 显示为 pdf,我们可以下载。 我想在我们的控制器渲染之前自动保存这个 pdf。 我设法保存了文件,但我认为存在编码问题,因为当我打开 pdf 文件时,出现错误消息。

[HttpGet]
        [Route("Get")]
        public async Task<IActionResult> GetEmployeeInfo()
        {
            var empObj = new EmployeeInfo
            {
                EmpId="1001",EmpName="Arthur",Department="Lille",Designation="Dev Engineer"
            };
           
           var generatedPdf = await _generatePdf.GetPdf("Views/Employee/EmployeeInfo.cshtml",empObj);
            var test = generatedPdf.ToString();
          
            //reading all characters as byte and storing them to byte[]
            byte[] pdfIntoBtye = System.Text.Encoding.ASCII.GetBytes(test);
            //byte[] pdfIntoBtye = Convert.FromBase64String(test);
            MemoryStream memory = new MemoryStream(pdfIntoBtye);
            MemoryStream stream = new MemoryStream();
       
            string filePath = _environment.WebrootPath + "/PdfFiles/test5.pdf";
            
            if (!System.IO.File.Exists(filePath))
            {
             
                System.IO.File.WriteallBytes(filePath,pdfIntoBtye);
            }
            return generatedPdf;
        }

有人能给我建议一个解决方案吗?

解决方法

我找到了一个解决方案(问题出在我的 byte[] 属性中),现在我直接像这样生成我的 byte[] :vargeneratedPdf2 = await _generatePdf.GetByteArray("Views/Employee/EmployeeInfo.cshtml",empObj );

我的最终解决方案:``` readonly IGeneratePdf _generatePdf; var generatePdf2 = await _generatePdf.GetByteArray("Views/Employee/EmployeeInfo.cshtml",empObj); string filePath = _environment.WebRootPath + "/PdfFiles/test7.pdf";

        if (!System.IO.File.Exists(filePath))
        {
         
            System.IO.File.WriteAllBytes(filePath,generatedPdf2);
        }
        return await _generatePdf.GetPdf("Views/Employee/EmployeeInfo.cshtml",empObj);```

像这样,我以pdf文件显示并自动保存。