【问题标题】:Receive files from multiple form data keys in ASP.NET MVC Web API从 ASP.NET MVC Web API 中的多个表单数据键接收文件
【发布时间】:2023-03-27 18:38:01
【问题描述】:

我正在 ASP.NET MVC (.NET Framework) Web 应用程序中处理 Web API.NET Framework 版本为 4.7.2

我有一个用于文件上传的 Web API(HTTP Post 方法),我使用以下代码检索文件

HttpContext context = HttpContext.Current;
var files = context.Request.Files;
// returns List<HttpPostedFile>

用户可以上传多个文件。上面一行返回了一个文件对象列表,到目前为止我很好。

当我从 Postman 调用 API 时,我准备了如下屏幕截图所示的有效负载。

注意:在 Postman 中,可以在 POST API 请求负载中添加文件(请参阅in here 如何),我正在使用该功能来测试我的 API。

提示说明:请注意,在 Postman 中,我没有为表单数据提供任何密钥。

================================================ ======= ======================

=== 我的实际问题 ===

现在使用我的 API 的各方提出了新的要求。他们希望使用多个密钥上传文件,如下面的屏幕截图所示。

我必须以不同的方式处理每个键的文件。因此,我不能使用我以前的代码

var files = context.Request.Files;

因为这段代码将所有文件一起返回,我无法确定哪个文件属于哪个键。

是否可以使用密钥检索文件?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-web-api file-upload


    【解决方案1】:

    参考:CodeCaster 在Select uploaded files by key 中的回答

    我不知道任何可以按键检索文件的方法。

    返回的列表内
    var files = context.Request.Files;
    

    可以通过数字索引访问单个文件,但不能通过键访问。 因此 files["keyName"] 返回 null。

    但是,有一种迂回的方法可以确定哪些文件属于哪个键。代码如下:

                    HttpContext context = HttpContext.Current;
                    var files = context.Request.Files;
                    var allKeys = files.AllKeys;
                    Dictionary<string, List<HttpPostedFile>> allFilesByKeys = new Dictionary<string, List<HttpPostedFile>>();
    
                    for (int i = 0; i < files.Count; i++)
                    {
                        string keyForThisFile = files.GetKey(i);
                        if (allFilesByKeys.ContainsKey(keyForThisFile))
                        {
                            allFilesByKeys[keyForThisFile].Add(files[i]);
                        }
                        else
                        {
                            allFilesByKeys[keyForThisFile] = new List<HttpPostedFile>();
                            allFilesByKeys[keyForThisFile].Add(files[i]);
                        }
                    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-14
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 2017-09-26
      • 2011-05-23
      • 2018-04-08
      • 2012-11-16
      • 1970-01-01
      相关资源
      最近更新 更多