Возврат IFormFileCollection из Rest API

У меня есть приложение api rest на asp core 2.1, где я должен возвращать изображения. И в клиентском приложении (asp mvc site) мне нужно, чтобы IFormFileCollection работал с ним. Как мне это сделать? Я не могу понять, как создать IFormFile из существующего файла на остальные API и вернуть его или как конвертировать входящий FileResult в IFormFile

2 ответа

Ты не можешь. IFormFile это конструкция для обработки размещенных двоичных данных из multipart-formdataзакодированный запрос. Это не то, что вы создали бы сами или вернулись из действия.

Если вы хотите вернуть файл, вам нужно вернуть FileResult построен из одного из: string путь к файлу в файловой системе, Stream содержащие данные, или byte[] содержащий необработанные байты файла.

Кроме того, невозможно вернуть "коллекцию" файлов из одного ответа. Если вам нужно вернуть несколько файлов, вам нужно поместить их в контейнер, такой как zip-архив, и вернуть его вместо этого.

          private static IFormFileCollection GetFormFileCollection()
    {
        var filesFolder = $" 
       {AppDomain.CurrentDomain.SetupInformation.ApplicationBase}UploadFiles\\";
        List<string> filesPathsListToUpload = new List<string>();
        filesPathsListToUpload.Add($"{filesFolder}UploadFile1.png");
        filesPathsListToUpload.Add($"{filesFolder}UploadFile2.jpg");
        filesPathsListToUpload.Add($"{filesFolder}UploadFile3.bmp");

        FormFileCollection filesCollection = new FormFileCollection();
            foreach (var filePath in filesPathsListToUpload)
            {
                var stream = File.OpenRead(filePath);
                IFormFile file = new FormFile(stream, 0, stream.Length, "files", 
                Path.GetFileName(filePath))
                {
                    Headers = new HeaderDictionary(),
                    ContentType = filePath.Split('.')[1] == "jpg" ? "image/jpeg"
                        : filePath.Split('.')[1] == "png" ? "image/png"
                        : "image/bmp",
                };
    
                filesCollection.Add(file);
            }

            var httpContext = new DefaultHttpContext();
            httpContext.Request.Headers.Add("Content-Type", "multipart/form- 
            data");
            httpContext.Request.Form = new FormCollection(new Dictionary<string, 
            StringValues>(), filesCollection);

            return httpContext.Request.Form.Files;
    }
Другие вопросы по тегам