Asp.Net Core API 文件上传

问题描述

我正在尝试为应用程序 (ASP.NET Core 3.1/C#) 创建日志文件上传 API。基本上,文件应该能够按需上传到 URL,并将其保存到 Azure BLOB 存储以供日后查看。

从 Postman 进行测试时,我得到了好坏参半的结果。如果我将 Content-Type 标头保持原样,我会收到“415 Unsupported Media Type”错误

Postman Unsupported Media Type error

enter image description here

如果我取消选中 Content-Type 标头,我成功访问了 API,但日志文件始终为 NULL。在阅读了大量具有类似问题的帖子后,我尝试过使用和不使用 [FromForm]、[Consumes] 以及许多其他此类小更改,但无法弄清楚。

我假设我做错或遗漏了一些简单的事情,但我没有想法!

下面是我的 API 端点的代码

        [HttpPost]
        [Consumes("multipart/form-data")]
        [Route("/api/beam/v1/{orgCode}/device/{deviceCode}/log")]
        [Authorize]
        public async Task<IActionResult> PostLogAsync(string orgCode,string deviceCode,[FromForm(Name = "log")] IFormFile log)
        {
            string lvBlobFileName;
            string lvContainerName;

            string strContent = Request.ContentType;

            lvContainerName = _configuration["StorageContainerLogs"];

            BlobContainerClient container = GetCloudBlobContainer(lvContainerName);

            lvBlobFileName = $"{orgCode}/{deviceCode}/{deviceCode}_{DateTime.Now.ToString("yyyyMMddhhmmss")}";
            BlobClient blob = container.GetBlobClient(lvBlobFileName);

            if (log == null)
                return Ok("No files to upload");

            using (Stream reader = log.OpenReadStream())
            {
                await blob.UploadAsync(reader);
            }

            return Ok();
        }

感谢任何帮助!

解决方法

据我所知,如果你想将自动模型绑定的文件发布到 iformfile,你应该使用 form-data 而不是二进制。

更多细节,您可以参考以下邮递员设置:

enter image description here

结果:

enter image description here