【.NET/.NET CORE】API上传文件后台处理方法

文章描述了一种在API中遇到的错误,即尝试使用HttpPostedFileBase作为参数获取上传文件时,系统不支持multipart/form-data媒体类型。解决方案是改从HttpContext.Current.Request.Files集合中获取上传的文件内容。示例代码展示了如何处理上传的单个或多个文件,包括检查文件是否存在,保存文件到服务器的指定目录,并返回保存的文件路径。
摘要由CSDN通过智能技术生成

尝试用HttpPostedFileBase等文件对象作为参数获取上传内容,提示错误为:

"{"Message":"The request entity's media type 'multipart/form-data' is not supported for this resource.","ExceptionMessage":"没有可用的 MediaTypeFormatter,无法从媒体类型为“multipart/form-data”的内容中读取类型为“HttpPostedFileBase”的对象。","ExceptionType":"System.Net.Http.UnsupportedMediaTypeException","StackTrace":"   在 System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n   在 System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"}"

 经查阅资料后判断API中无法使用该类对象作为参数,采用从HttpContext.Current.Request.Files中获取文件内容方式处理上传内容

/// <summary>
        /// 单/多文件上传
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public IHttpActionResult UploadFileProc()
        {
            //从HttpContext.Current.Request.Files获取文件对象,如果存在内容则取第一个文件
            var file = HttpContext.Current.Request.Files.Count > 0 ?
       HttpContext.Current.Request.Files[0] : null;
            //多文件时获取HttpContext.Current.Request.Files文件列表,并循环处理列表内容
            //     var files = HttpContext.Current.Request.Files.Count > 0 ?
            //HttpContext.Current.Request.Files : null;
            if (file != null && file.ContentLength > 0)
            {
                //获取文件名称
                var fileName = Path.GetFileName(file.FileName);
                
                string saveDir = HttpContext.Current.Server.MapPath("~/uploads");
                if (!Directory.Exists(saveDir))//当保存路径不存在时创建
                {
                    System.IO.Directory.CreateDirectory(saveDir);
                }
                //生成文件路径
                var path = Path.Combine(
                    HttpContext.Current.Server.MapPath("~/uploads"),
                    fileName
                );
                file.SaveAs(path);//保存文件
                return Json(path);
            }
            else {
                return Json("");
            }
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值