gpt4 book ai didi

asp.net-mvc - ASP.NET MVC - 如何从 FileResult 获取文件?

转载 作者:行者123 更新时间:2023-12-02 15:39:17 25 4
gpt4 key购买 nike

简短版:我有一个返回 FileResult 的第三方 MVC 扩展。我希望能够在将文件返回给客户端之前对其进行处理。我该怎么做?

如果您对无聊的细节感兴趣,请阅读以下内容:

我使用 Devexpress XtraReports 进行报告。问题是它的 PDF 导出很糟糕,但 RTF 导出效果很好。我想创建 action&result 过滤器来欺骗 DevExpress 生成 rtf 而不是 pdf(完成)并使用其他第三方库将 rtf 转换为 pdf。唯一的问题是我需要从 FileResult 获取 rtf 文件并返回我自己的包含转换后内容的 FileResult。

//编辑:现在的代码如下所示:

        public virtual ActionResult ReportExport(TParameters parameters)
{
return DevExpress.Web.Mvc.ReportViewerExtension.ExportTo(this.GetReport(parameters));
}

最佳答案

您说您正在使用返回 FileResult 的第三方 MVC 扩展,并且您想要访问包含在结果中的文件详细信息。

如果您看到 FileResult,它是一个抽象类,我只知道 MVC 中提供了三个内置实现(我不知道其他的):FileContentResult FileStreamResultFilePathResult

所有这些类都提供公共(public)属性来访问文件的详细信息。对于前。 FileContentResult 包含一个名为 FileContents 的公共(public)属性,它以字节数组的形式返回文件的内容。

第三方扩展可以返回内置类型的任何 FileResult 实现,或者很糟糕(如果您无法访问这些类型)它们自己的类型。您可以检查返回的 FileResult 实例的类型并相应地转换它以访问文件详细信息。

var fileResult = ... returned by the MVC extension

if(fileResult is FileContentResult)
{
var fileContentResult = fileResult as FileContentResult;
var fileContent = fileContentResult.FileContents;
// process the file
}
else if(fileResult is FileStreamResult)
{
var fileStreamResult = fileResult as FileStreamResult;
var fileStream = fileStreamResult .Stream;
//...
}
else if(fileResult is FilePathResult) // this result only contains the path
// of the file name
{
//...
}

如果你想让这些东西可重用,你可以实现一个自定义文件结果,它采用构造函数中扩展返回的 FileResult 并覆盖 WriteFile 方法。

关于asp.net-mvc - ASP.NET MVC - 如何从 FileResult 获取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10781792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com