Asp.Net核心API文件上传
Asp.Net Core API File Upload
我正在尝试为应用程序 (ASP.NET Core 3.1/C#) 创建日志文件上传 API。基本上,文件应该能够按需上传到 URL,并将其保存到 Azure BLOB 存储以供以后查看。
从 Postman 进行测试时,我得到了不同的结果。如果我离开 Content-Type header as-is,我会收到“415 Unsupported Media Type”错误:
如果我un-checkContent-Typeheader,我成功命中了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();
}
感谢任何帮助!
据我所知,如果你想post将自动模型绑定到 iformfile 的文件,你应该使用 form-data 而不是二进制文件。
更多细节,可以参考下面postman设置:
结果:
我正在尝试为应用程序 (ASP.NET Core 3.1/C#) 创建日志文件上传 API。基本上,文件应该能够按需上传到 URL,并将其保存到 Azure BLOB 存储以供以后查看。
从 Postman 进行测试时,我得到了不同的结果。如果我离开 Content-Type header as-is,我会收到“415 Unsupported Media Type”错误:
如果我un-checkContent-Typeheader,我成功命中了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();
}
感谢任何帮助!
据我所知,如果你想post将自动模型绑定到 iformfile 的文件,你应该使用 form-data 而不是二进制文件。
更多细节,可以参考下面postman设置:
结果: