c# - 使用文件数组解析 FormData [] - 到控制器并保存到 PSQL
问题描述
再会,
有 MVC 后端 - 应该如何为这类问题设计解决方案?
所以 FE 发送这个文件数组:
FormData:[
file0: (binary)
file1: (binary)
file2: (binary)
]
然后在 BE 端有 Controller:
目前的解决方案将这些文件存储到文件系统。
[AllowAnonymous]
[HttpPost("file")]
public async Task<ActionResult> PostAsync([FromForm] List<IFormFile> files)
{
long size = files.Sum(f => f.Length);
Console.WriteLine(files);
Console.WriteLine(size);
foreach (var formFile in files)
{
if (formFile.Length > 0)
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", formFile.FileName);
using var stream = System.IO.File.Create(filePath);
await formFile.CopyToAsync(stream);
}
}
// Process uploaded files
// Don't rely on or trust the FileName property without validation.
return Ok(new { count = files.Count, size });
}
有一个带有该文件的模型(将来应该有更多属性)
namespace WebApi.Models
{
public class Model
{
public string Name { get; set; }
public byte[] Files { get; set; }
}
}
问题是:如何将此二进制对象数组映射到示例模型并将此材料数据存储在数据库(postgress)中?
解决方案
听起来您的问题可以归结为两个不同的问题:
foreach (var formFile in files)
{
if (formFile.Length > 0)
{
using var memoryStream = new MemoryStream();
await formFile.CopyToAsync(memoryStream);
var model = new Model
{
Name = formFile.Name,
Files = memoryStream.ToArray()
};
// add model to database
}
}
- 如何
byte[]
在 PostgreSQL 中保存一个?
使用Npgsql,您可以直接将byte[]
C# 中的 a映射到bytea
PostgreSQL 中的列。
推荐阅读
- django - 使用 django-rest-framework ModelViewSet 创建时如何强制一个值?
- java - Spring Boot PostMapping 反序列化长数组
- kotlin - 如何在 Kotlin 的方法通道中制作回调/协程?
- android - android kotlin,覆盖测试失败,kotlin编译代码
- rust - 如何用 clap 解析非标准命令行参数?-bypas1234567890
- node.js - LambdaInvalidResponse nodejs
- pine-script - 如何检测当前值是否是过去的最低 RSI 值
- python - 如何在 python 中创建一个用户可以在整个 python 游戏中使用的命令?
- c - 何时使用边缘模式和 oneshot 重新武装 epoll?
- vb.net - 将媒体文件附加到我的发布程序 (vb.net)