【问题标题】:.net core API fileupload not working on Azure.net 核心 API 文件上传在 Azure 上不起作用
【发布时间】:2019-12-20 17:18:31
【问题描述】:

我们在控制器中得到以下代码:

[HttpPost("v1/item/{id}/images")]
public async Task<ActionResult> UploadImage([FromRoute]string Id, [FromForm]IFormFile file)
{
    //Upload image logic
}

本地此代码的工作方式与我们预期的一样。当我们将它放在 Azure 上时,我们会得到以下响应。

{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":"Bad Request","status":400,"traceId":"|1587f1cc093cd640a1ece0a37a6b33b5.d408b19_"}

看起来我们不允许在 Azure 上以这种方式上传文件。但找不到任何方法来完成这项工作。

该项目是一个 .NET Core 2.2 MVC 项目,它在标准 Azure Web 应用程序上运行。

【问题讨论】:

  • 由于您在控制器中,您是否尝试过访问this.Request.Form.Files 集合而不是将其作为参数获取?
  • 你上传的路径是什么?
  • 这是APIController,您是通过multipart/form-data 帖子发送文件吗?
  • 这是一个 APIController,它作为 multipart/form-data 发送。最后,它被上传到 Blob 存储。在本地它仍然有效。现在检查@BercoviciAdrian 解决方案以使用 this.Request.Form.Files 而不是将其作为参数
  • 您可以使用给定的 traceId 访问日志消息吗?

标签: c# azure asp.net-core .net-core


【解决方案1】:

当想要使用附有文件的 Forms(例如 multipart 请求)时,我们可以使用以下方式访问请求的文件:

Request.Form.Files表示传入表单的文件集合。

将使用OpenReadStream 方法将所需文件作为流读取,然后进行反序列化。

【讨论】:

    【解决方案2】:

    修复方法是按照 Bercovici Adrian 的建议将其更改为 Request.Form.Files。所以现在的代码是:

    [HttpPost("v1/item/{id}/images")]
    public async Task<ActionResult> UploadImage([FromRoute]string Id)
    {
        IFormFile file = Request.Form.Files[0]
        //Upload image logic
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 2021-12-24
      • 2020-01-30
      • 2017-01-21
      • 1970-01-01
      • 2018-06-20
      相关资源
      最近更新 更多