我在 asp core 2.1 上有 rest api 应用程序,我必须返回图像。然后在客户端应用程序(asp mvc 站点)上,我需要让 IFormFileCollection 使用它。我该怎么做?我无法理解如何从 rest api 上的现有文件创建 IFormFile 并将其返回或如何将传入的 FileResult 转换为 IFormFile
问问题
578 次
2 回答
1
你不能。IFormFile
是用于处理来自multipart-formdata
-encoded 请求的已发布二进制数据的构造。这不是你自己创造或从行动中返回的东西。
如果你想返回一个文件,你需要返回一个FileResult
从以下之一构造的:string
文件系统上文件的路径、Stream
包含数据的 a 或byte[]
包含文件原始字节的 a。
此外,不可能从单个响应中返回文件的“集合”。如果您需要返回多个文件,则需要将它们放入一个容器(例如 zip 存档)中,然后将其返回。
于 2018-08-16T13:13:40.503 回答
0
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;
}
于 2021-09-22T08:27:10.137 回答