【转】.net core webapi 上传图片

原文地址:https://blog.csdn.net/weixin_41600552/article/details/83015725

[HttpPost("api/QualificationOne/Upload")]
public ActionResult Upload(IFormCollection Files, int EntId, int CrtUser)
{
  try
  {
  //var form = Request.Form;//直接从表单里面获取文件名不需要参数
  string dd=  Files["File"];
  var form = Files;//定义接收类型的参数
  Hashtable hash = new Hashtable();
  IFormFileCollection cols = Request.Form.Files;
//cols=Files.Files;   
if (cols == null || cols.Count == 0)   {   return Json(new { status = -1, message = "没有上传文件", data = hash });   }   foreach (IFormFile file in cols)   {     //定义图片数组后缀格式     string[] LimitPictureType = { ".JPG", ".JPEG", ".GIF", ".PNG", ".BMP" };     //获取图片后缀是否存在数组中     string currentPictureExtension = Path.GetExtension(file.FileName).ToUpper();     if (LimitPictureType.Contains(currentPictureExtension))     {     //为了查看图片就不在重新生成文件名称了     // var new_path = DateTime.Now.ToString("yyyyMMdd")+ file.FileName;     var new_path = Path.Combine("uploads/images/", file.FileName);     var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", new_path);     using (var stream = new FileStream(path, FileMode.Create))     {     //图片路径保存到数据库里面去     bool flage= QcnApplyDetm.FinancialCreditQcnApplyDetmAdd(EntId, CrtUser, new_path);     if (flage == true)     {       //再把文件保存的文件夹中       file.CopyTo(stream);       hash.Add("file", "/" + new_path);     }     }     }     else     {     return Json(new { status = -2, message = "请上传指定格式的图片", data = hash });     }   }   return Json(new { status = 0, message = "上传成功", data = hash }); } catch (Exception ex) { return Json(new { status = -3, message = "上传失败", data = ex.Message }); } }

这里有几个重点:

1:引用 IFormCollection 类 获取 Asp.Net.Core 中 Http 请求的一个类,就可以直接获取form表单中的参数,因为 ASP.NET Core 中,没有了 IIS ,它的 HttpContext 只能用 IFormCollection 生成获取form表单中的数据

命名空间为 :namespace Microsoft.AspNetCore.Http

2: 引用 IFormFileCollection 类 获取上传图片的文件名

命名空间为 :namespace Microsoft.AspNetCore.Http

IFormFile GetFile(string name);,获取一张图片的名称
IReadOnlyList<IFormFile> GetFiles(string name);获取多张图片的名称

3:创建一个 Hashtable hash = new Hashtable(); 类 保存图片路劲进行返回数据

总结:

asp.net mvc 与 asp.net core 中上传图片区别点是

net core没有httpContext 不能采用这种方式获取 http请求中的form 数据,只能使用 IFormCollection 接口类

实战

////// 上传处方图片
        /////////public TDataUploadRcpImg(IFormCollection uploadfiles, string OrgId, string RcpNo)
        {
            var response = IsValid(uploadfiles, OrgId,RcpNo);
            if (response.Tag != 1)
                return new TData(0, response.Message);
            var realOrgId = response.Data;
            if (uploadfiles == null || uploadfiles.Files==null || uploadfiles.Files.Count &lt;= 0) return new TData(0, "图片不能为空!");
            var file = uploadfiles.Files[0];
            //定义图片数组后缀格式          
            var LimitPictureType = new List();
            LimitPictureType.Add(".png");
            //获取图片后缀是否存在数组中
            string currentPictureExtension = Path.GetExtension(file.FileName).ToLower();
            if (!LimitPictureType.Contains(currentPictureExtension))
            {
                return new TData(0, "请上传指定格式的图片!");
            }
            var rcpMainImgFolder = $@"{AppDomain.CurrentDomain.BaseDirectory}\Resource\RcpMainImg\{realOrgId}\";           
            var relativeFilePath = $@"Resource\RcpMainImg\{realOrgId}\{RcpNo + currentPictureExtension}";
            var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, relativeFilePath); //图片存储文件的路径.
                                                                                               
            try
            {
                #region --处理文件夹及文件--
                if (!Directory.Exists(rcpMainImgFolder))
                    Directory.CreateDirectory(rcpMainImgFolder);
                if (System.IO.File.Exists(filePath) == true)//删除原文件
                {
                    try { System.IO.File.Delete(filePath); }
                    catch (Exception)        //上传异常处理
                    {
                    }
                }
                #endregion
                using (var stream = new FileStream(filePath, FileMode.Create))
                {
                    //再把文件保存的文件夹中
                    file.CopyTo(stream);
                }
            }
            catch (Exception ex) {
                LogHelper.Error($"图片上传失败[CorpCode={OrgId},OrgId={realOrgId},RcpNo={RcpNo}]",ex);
                return new TData(0, "上传失败!");
            }
            return new TData(1, "success!") { 
                Data= relativeFilePath
            };
        }

 可以用实体映射参数

public TData<UploadFileEntity> SaveFiles([FromQuery] UploadFileListParam model, [FromQuery] IFormCollection fileList)

 

posted @ 2021-10-12 13:49  花影疏帘  阅读(445)  评论(0编辑  收藏  举报