【问题标题】:C# IFormFile as ZipFileC# IFormFile 作为 ZipFile
【发布时间】:2017-09-14 21:22:47
【问题描述】:

我有一个 REST API 端点,它在 .Net Core 1.1 上接收 zip 文件。我从这样的请求中获取 IFormFile

var zipFile = HttpContext.Request.Form.Files.FirstOrDefault();

然后我需要将它从不支持 IFormFile 的 .Net Standard 1.5 传递给服务方法。

所以问题是:如何将 IFormFile 转换为 ZipFile 或标准 1.5 支持的其他类型,或者可能有一些更合适的方法来操作 zip 文件? 谢谢!

【问题讨论】:

  • 服务方法是否与上述代码运行在同一个进程中?
  • @mjwills 是的。如果您正在考虑 FileStream - 可以,但如果我会在短时间内收到大量请求怎么办?

标签: c# zip .net-standard asp.net-core-1.1 iformfile


【解决方案1】:

IFormFile 只是接收文件的包装。您仍然应该读取实际的文件做一些事情。例如,您可以将文件流读入字节数组并将其传递给服务:

byte[] fileData;
using (var stream = new MemoryStream((int)file.Length))
{
    file.CopyTo(stream);
    fileData = stream.ToArray();
}

或者您可以将流复制到文件系统中的物理文件中。

但这基本上取决于您实际上想对上传的文件做什么,因此您应该从那个方向开始并将IFormFile转换为您需要的东西。


如果您想以 ZIP 格式打开文件并从中提取一些内容,您可以尝试采用流的 ZipArchive constructor。像这样的:

using (var stream = file.OpenReadStream())
using (var archive = new ZipArchive(stream))
{
    var innerFile = archive.GetEntry("foo.txt");
    // do something with the inner file
}

【讨论】:

  • 是的,很好的处理方式。在服务中,我需要按名称从 zip 中获取特定的 txt 文件,然后从中解析数据
  • @RomanBorovets 在这种情况下,您可以直接将文件流作为 ZipArchive 打开并尝试从中检索文件。
猜你喜欢
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多