【问题标题】:How to get content from FileStreamResult如何从 FileStreamResult 获取内容
【发布时间】:2014-11-07 03:20:08
【问题描述】:

我正在使用第三方库,其中一种方法返回FileStreamResult

public FileStreamResult GenerateFile(OutFormat format, dynamic params);

我的控制器中的一个动作调用了这个方法:

public ActionResult GenerateExcel()
{
    Utils.XCore core = new Utils.XCore(...); // where ... are contructor params
    // ... other codes here ...
    return core.GenerateFile(OutFormat.EXCEL, new { FileName = "Report" });
}

这会很好,但有时我想将多个 Excel 工作表合并为一个,就像这样:

public ActionResult GenerateExcel()
{
    Utils.XCore core = new Utils.XCore(...); // where ... are contructor params
    // ... other codes here ...
    var excel1 = core.GenerateFile(OutFormat.EXCEL, new { FileName = "rpt1" });
    var excel2 = core.GenerateFile(OutFormat.EXCEL, new { FileName = "rpt2" });
    var excel3 = core.GenerateFile(OutFormat.EXCEL, new { FileName = "rpt3" });

    var finalContent = combineFile(excel1, excel2, excel3);

    return new FileStreamResult(finalContent, "application/ms-excel")
       {
           FileDownloadName = "Report.xls"
       };
}

我现在的问题是我不知道如何从FileStreamResult 获取内容。关于如何做的任何想法?甚至包含网络链接的 cmets 也非常受欢迎。谢谢!

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

如果我正确理解您的问题,您想处理/获取来自FileStreamResult 的内容。该类包含一个名为FileStream 的属性,它是一个Stream 对象。现在,流对象现在可以使用以下修改代码from this site保存为文件:

private void streamToFile(Stream fileStream, string filePath)
{
    using (FileStream writeStream = new FileStream(filePath, 
                                    FileMode.Create, 
                                    FileAccess.Write))
    {
        int length = 1024;
        Byte[] buffer = new Byte[length];
        int bytesRead = fileStream.Read(buffer, 0, length);
        while (bytesRead > 0)
        {
            writeStream.Write(buffer, 0, bytesRead);
            bytesRead = fileStream.Read(buffer, 0, length);
        }
        fileStream.Close();
        writeStream.Close();
    }
}

以下是如何使用:

var excel1 = core.GenerateFile(OutFormat.EXCEL, new { FileName = "rpt1" });
string filePath = "C:\\yourFileName.xls"; // path of your newly saved file 
using (Stream reportStream = excel1.FileStream)
{
     streamToFile(reportStream, filePath);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 2016-06-21
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多