Возврат 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;
}