加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core-webapi – 在asp.net核心web api中上传多部分/表单

发布时间:2020-12-16 04:32:31 所属栏目:asp.Net 来源:网络整理
导读:如何在asp.net核心web api中上传多部分表单数据文件?是否可以在单个POST中同时POST JSON和图像? 解决方法 更新 – .net核心2.0 使用.net核心,您可以利用新的IFormFile接口在同一帖子中上传图像和属性.例如: [HttpPost("content/upload-image")]public asy
如何在asp.net核心web api中上传多部分表单数据文件?是否可以在单个POST中同时POST JSON和图像?

解决方法

更新 – .net核心2.0

使用.net核心,您可以利用新的IFormFile接口在同一帖子中上传图像和属性.例如:

[HttpPost("content/upload-image")]
public async Task<IActionResult> UploadImage(MyFile upload)

MyFile类看起来像:

public class MyFile
{
    public string userId { get; set; }        
    public IFormFile File { get; set; }
    // Other properties
}

您可以按如下方式访问属性和文件:

var file = upload.File // This is the IFormFile file
var param = upload.userId // param

要将文件保留/保存到磁盘,您可以执行以下操作:

using (var stream = new FileStream(path,FileMode.Create))
{
    await file.File.CopyToAsync(stream);
}

.NET Framework

是的.根据您正在使用的客户端框架,您可以为内容类型 – 多部件配置Web API,然后执行以下操作:

[HttpPost]
[Route("content/upload-image")]       
public async Task<HttpResponseMessage> Post()
{
    if (!Request.Content.IsMimeMultipartContent())
    {
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    }           
    // enter code here
}

定义并设置保存图像的目录.

var root = HttpContext.Current.Server.MapPath("~/Content/Images/");
if (!Directory.Exists(root))
{
    Directory.CreateDirectory(root);
}

设置StreamProvider并尝试获取模型数据,这是您提到的JSON.

var streamProvider = new MultipartFormDataStreamProvider(root);
var result =
    await Request.Content.ReadAsMultipartAsync(streamProvider);
if (result.FormData["model"] == null)
{
    throw new HttpResponseException(HttpStatusCode.BadRequest);
}

现在访问请求中的文件.

try
{
    // Deserialize model data to your own DTO
    var model = result.FormData["model"];
    var formDto = JsonConvert
        .DeserializeObject<MyDto>(model,new IsoDateTimeConverter());
    var files = result.FileData.ToList();                
    if (files != null)
    {
        foreach (var file in files)
        {
            // Do anything with the file(s)
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读