原文地址:https://blog.csdn.net/weixin_41600552/article/details/83015725
[HttpPost("api/QualificationOne/Upload")]
public ActionResult Upload(IFormCollection Files, int EntId, int CrtUser)
//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);
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 <= 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); //图片存储文件的路径.
#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)