栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

如何用.NET mvc和webapi实现文件上传

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何用.NET mvc和webapi实现文件上传

本文首发《智客工坊-.net mvc和webapi实现文件上传》。

导航
  • 搭建项目
  • .NET MVC 实现上传
  • Web API 实现上传
  • 源码

在日常开发中,文件上传是必不可少的功能。如,用户头像,excel文件上传等等。但是,由于开发方式的问题,比如是单体应用还是前后端分离模式,导致实现上有些许的差异。

这里笔者总结了.NET` MVC和Web API 2 中方式实现上传并附上源码,希望能够对您有帮助。

搭建项目
  • 打开visual studio 2019,新建一个MVC web 项目。取名upload.netcore.web
  • 新建一个MVC控制器,取名TestController
  • 新建一个web api 控制器,取名MediaController

建好之后的项目结构如下:

.NET MVC 实现上传

这个是标准的MVC模式的写法,View层提交Form表单方式上传文件。

MVC控制器文件上传的实现

这里模拟上传文件到项目的根目录的uploads文件夹,可以根据实际情况实现本地存储或者服务器存储。

[HttpPost]
        public async Task PostMedia([FromForm]IFormFile file)
        {
            var formFile = Request.Form.Files.FirstOrDefault();

            if (formFile == null)
            {
                throw new Exception("文件不能为空");
            }

            //文件上传
            var uploads = Path.Combine(_environment.WebRootPath, "uploads");
            using (var fileStream = new FileStream(Path.Combine(uploads, file.FileName), FileMode.Create))
            {
                await file.CopyToAsync(fileStream);
            }

            return Ok(new { success = true });
        }

视图实现
@{
    ViewData["Title"] = "UploadByRazor";
}

UploadByRazor


    @using (Html.BeginForm("PostMedia", "test", FormMethod.Post,new { enctype = "multipart/form-data" }))
    {
        上传文件
        


}

.net MVC 在用到上传文件控件时,必须添加enctype = "multipart/form-data"属性’

enctype = "multipart/form-data的作用是:设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了application/x-www-form-urlencoded,才能完整把数据提交到controller(后台代码)中。

Web API 实现上传

此种场景一般用于前后端分离的开发模式。后端提供restful风格接口供前端调用(这里有详细:.NET Core 跨平台)

webapi控制器文件上传的实现
[Route("api/[controller]")]
    [ApiController]
    public class MediaController : ControllerBase
    {
        private IHostingEnvironment _environment;
        public MediaController(IHostingEnvironment env)
        {
            _environment = env;
        }

        /// 
        /// 新增(上传)多媒体文件
        /// 
        /// 
        /// 
        [HttpPost]
        [Consumes("application/json", "multipart/form-data")]
        public async Task PostMedia([FromForm]IFormFile file)
        {
            var formFile = Request.Form.Files.FirstOrDefault();

            if (formFile == null)
            {
                throw new Exception("文件不能为空");
            }

            //文件上传
            var uploads = Path.Combine(_environment.WebRootPath, "uploads");
            using (var fileStream = new FileStream(Path.Combine(uploads, file.FileName), FileMode.Create))
            {
                await file.CopyToAsync(fileStream);
            }

            return Ok(new { success = true });
        }
    }

前端调用
  • postman测试
  • ajax 测试
postman测试
jquery ajax 调用
@{
    ViewData["Title"] = "UploadByAjax";
}

UploadByAjax



源码

  talk is cheap,show me the code。

留言可以获取源码。

  • 智客工坊-如何用.net mvc和webapi实现文件上传
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/909799.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号