首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >活动报告http下载不能正常工作

活动报告http下载不能正常工作
EN

Stack Overflow用户
提问于 2022-10-05 13:40:44
回答 2查看 101关注 0票数 0

我试图在WebNetCore6.0中生成活动报告(v16)。对于这两种类型,浏览器中的结果总是“失败”。我做错什么了?

代码语言:javascript
复制
       [HttpGet("GetExcelReport")]
        public async Task<ActionResult> GetExcelReportAsync(string type)
        {
            var stream = GenerateDoc(type, Response);

            await stream.CopyToAsync(Response.Body);
            return new OkResult();
        }
        internal System.IO.Stream GenerateDoc(string type, HttpResponse response)
        {
            using (var reportStream =
                System.Reflection.Assembly.GetEntryAssembly().GetManifestResourceStream("App.Reports.Reports.PageReport1.rdlx"
                ))
            using (var reader = new System.IO.StreamReader(reportStream))
            {
                var rpt = new GrapeCity.ActiveReports.PageReport(reader);
                
                IRenderingExtension ri = null;

                if (type == "pdf")
                {
                    ri = new GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension();
                    Response.ContentType = "application/pdf";
                    Response.Headers.Add("content-disposition", $"attachment; filename=sdfgsdfg-sdfgsdf.pdf");
                }
                else
                {   
                    ri = new GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtension();
                    Response.ContentType = "application/vnd.ms-excel";
                    Response.Headers.Add("content-disposition", $"attachment; filename=sdfgsdfg-sdfgsdf.xls");
                }

                var output = new GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider();
                rpt.Document.Render(ri, output);
                return output.GetPrimaryStream().OpenStream();
            }
        }

EN

回答 2

Stack Overflow用户

发布于 2022-10-06 05:42:46

假设您的该部件工具工作良好,您可以成功地获得流。

您可以检查Microsoft.AspNetCore.Mvc.ControllerBase类,并且可以找到返回FileResult的所有方法:

对于您的需求,您可以尝试以下方法

代码语言:javascript
复制
public virtual FileStreamResult File(Stream fileStream, string contentType, string? fileDownloadName)

我试过了,结果:

票数 1
EN

Stack Overflow用户

发布于 2022-10-06 07:22:50

我改变了返回文件的方式。

代码语言:javascript
复制
 [HttpGet("GetExcelReport")]
        public IActionResult GetExcelReportAsync()
        {
            Assembly assembly = System.Reflection.Assembly.GetEntryAssembly() ?? throw new ArgumentNullException(nameof(System.Reflection.Assembly));
            using (var reportStream = assembly.GetManifestResourceStream("BFW.Reports.Reports.PageReport1.rdlx"))
                if (reportStream != null)
                {
                    using (var reader = new System.IO.StreamReader(reportStream))
                    {
                        var rpt = new GrapeCity.ActiveReports.PageReport(reader);

                        IRenderingExtension? re = null;

                        re = new GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtension();

                        var output = new GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider();

                        rpt.Document.Render(re, output);

                        return File(output.GetPrimaryStream().OpenStream(), "application/octet-stream", "excelfile.xlsx");
                    }
                }

            return NotFound();
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73961277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档