0

我在 asp core 2.1 上有 rest api 应用程序,我必须返回图像。然后在客户端应用程序(asp mvc 站点)上,我需要让 IFormFileCollection 使用它。我该怎么做?我无法理解如何从 rest api 上的现有文件创建 IFormFile 并将其返回或如何将传入的 FileResult 转换为 IFormFile

4

2 回答 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 回答