C# IFormFile как ZipFile

У меня есть конечная точка API REST, которая получает ZIP-файл на.Net Core 1.1. Я получаю IFormFile из запроса, как это

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

И тогда мне нужно передать его в сервисный метод из.Net Standard 1.5, где IFormFile не поддерживается.

Таким образом, вопрос заключается в следующем: как я могу преобразовать IFormFile в ZipFile или в какой-либо другой тип, который поддерживается в Standard 1.5, или, может быть, есть более подходящий способ работы с zip-файлами? Спасибо!

1 ответ

Решение

IFormFile это просто оболочка для полученного файла. Вы все равно должны прочитать фактический файл и что-то с этим сделать. Например, вы можете прочитать поток файлов в байтовый массив и передать его службе:

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

Или вместо этого вы можете скопировать поток в физический файл в файловой системе.

Но это в основном зависит от того, что вы действительно хотите сделать с загруженным файлом, поэтому вы должны начать с этого направления и преобразовать IFormFile в то, что вам нужно.


Если вы хотите открыть файл в формате ZIP и извлечь из него что-то, вы можете попробовать ZipArchive Конструктор, который принимает поток. Что-то вроде этого:

using (var stream = file.OpenReadStream())
using (var archive = new ZipArchive(stream))
{
    var innerFile = archive.GetEntry("foo.txt");
    // do something with the inner file
}
Другие вопросы по тегам