gpt4 book ai didi

c# - ASP.NET MVC FileResult 到磁盘上的文件

转载 作者:太空狗 更新时间:2023-10-30 00:24:08 26 4
gpt4 key购买 nike

出于模拟目的,我想将 FileResult 输出到磁盘上的实际文件。

有没有办法获取 FileResult 的内容并将其写入文件?FileResult 上公开的属性有点小。

我正在寻找类似的东西:

var file_result = controller.CsvExport();

file_result.ToFile(@"C:\temp.csv");

public static void WriteToFile(this FileResult fileResult, string fileName)
{
// what to implement here?
[...]
}

最佳答案

当您返回 FileResult 时,使用这些子类之一...

然后您可以通过...访问该文件

  • FileContentResult.FileContents byte[]
  • FilePathResult.FileName 字符串/路径
  • FileStreamResult.FileStream 流

或者在您的扩展方法中,检查它是哪个子类型,将其转换为子类型,获取文件路径/内容/流并将其写入您的输出文件。

public static void ToFile(this FileResult fileResult, string fileName)
{
if (fileResult is FileContentResult)
{
File.WriteAllBytes(fileName, ((FileContentResult)fileResult).FileContents);
}
else if (fileResult is FilePathResult)
{
File.Copy(((FilePathResult)fileResult).FileName, fileName, true); //overwrite file if it already exists
}
else if (fileResult is FileStreamResult)
{
//from http://stackoverflow.com/questions/411592/how-do-i-save-a-stream-to-a-file-in-c
using (var fileStream = File.Create(filename))
{
var fileStreamResult = (FileStreamResult)fileResult;
fileStreamResult.FileStream.Seek(0, SeekOrigin.Begin);
fileStreamResult.FileStream.CopyTo(fileStream);
fileStreamResult.FileStream.Seek(0, SeekOrigin.Begin); //reset position to beginning. If there's any chance the FileResult will be used by a future method, this will ensure it gets left in a usable state - Suggestion by Steven Liekens
}
}
else
{
throw new ArgumentException("Unsupported FileResult type");
}
}

顺便说一句,如果我是你,我会称它为 ToFileOnDisk 而不是 ToFile,这样输出的去向就更清楚了。

关于c# - ASP.NET MVC FileResult 到磁盘上的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28988109/

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