以下方法均是个人,仅供参考

 public interface IFileHelper
{
/// <summary>
/// 保存文件 (返回 Test.jpg) 出错就返回 error|错误信息
/// </summary>
string SaveFile(IFormFile file, FileCategory fc);
bool DeleteFile(string fileName, FileCategory fc); }
public class FileHelper: IFileHelper
{
private readonly IHostingEnvironment _hostingEnv;
private static readonly Random _rdm = new Random();
public FileHelper(IHostingEnvironment env)
{
_hostingEnv = env;
}
/// <summary>
/// 保存文件(返回新文件名)
/// </summary>
/// <param name="file"></param>
/// <param name="fc"></param>
/// <returns></returns>
public string SaveFile(IFormFile file, FileCategory fc)
{
var path = GetUploadPath(fc);
var targetDirectory = Path.Combine(_hostingEnv.WebRootPath, string.Format(path));
//这里进行随机文件名
var fileName = GetRandName(file);
var savePath = Path.Combine(targetDirectory, fileName);
try
{
file.CopyTo(new FileStream(savePath, FileMode.Create));
//return Upload/NewsPhoto/Test.jpg
//返回文件名
return fileName;
}
catch
{
return "false";
}
}
/// <summary>
/// 删除文件
/// </summary>
/// <param name="fullPath"></param>
/// <returns></returns>
public bool DeleteFile(string fileName, FileCategory fc)
{
var path = GetUploadPath(fc);
var targetDirectory = Path.Combine(_hostingEnv.WebRootPath, string.Format(path));
//物理完整路径
var physicalPath = Path.Combine(targetDirectory, fileName);
try
{
File.Delete(physicalPath);
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 相对路径 /Upload/NewsPhoto/Test.jpg
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static string GetFullPath(FileCategory fc,string fileName)
{
var path = GetUploadPath(fc);
return Path.Combine(string.Format(path), fileName);
}
/// <summary>
/// 获取到上传路径(Upload//CasePhoto//)
/// </summary>
/// <param name="fc"></param>
/// <returns></returns>
public static string GetUploadPath(FileCategory fc)
{
switch (fc)
{
case FileCategory.CasePhoto:return "Upload//CasePhoto//";
case FileCategory.NewsPhoto:return "Upload//NewsPhoto//";
case FileCategory.CompanyPhoto: return "Upload//CompanyPhoto//";
case FileCategory.PositionPhoto: return "Upload//PositionPhoto//";
case FileCategory.Partner: return "Upload//Partner//";
default:return "";
}
} public static string GetRandName(string oldFileName)
{
//获取后缀
var extension= GetExtensionWithDot(oldFileName);
//产生新的文件名
var newFileName = DateTime.Now.ToFileTime().ToString() + _rdm.Next();
//组合
return newFileName + extension;
} public static string GetRandName(IFormFile file)
{
var fileName = file.FileName;
var randName = GetRandName(fileName);
return randName;
} public enum FileCategory
{
/// <summary>
/// 案例文章插图
/// </summary>
CasePhoto,
/// <summary>
/// 新闻文章插图
/// </summary>
NewsPhoto,
/// <summary>
/// 公司介绍插图
/// </summary>
CompanyPhoto,
/// <summary>
/// 职位描述插图
/// </summary>
PositionPhoto,
/// <summary>
/// 合作伙伴
/// </summary>
Partner, }
/// <summary>
/// 获取到后缀名的方法
/// </summary>
public static string GetExtensionWithDot(string fileName)
{
var dotIndex = fileName.LastIndexOf('.');
if (dotIndex < || dotIndex >= fileName.Length) return string.Empty;
return fileName.Substring(dotIndex);
}
}

//添加一个FileHelper的依赖注入(依赖注入的实现类一定要写构造方法)
//该方法是单例模式

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IFileHelper, FileHelper>();
}

在startup中加入

新建一个UploadController 专门处理上传

public class UploadController : Controller
{
private readonly IFileHelper _fileHelper;
public UploadController(IFileHelper fileHelper)
{
_fileHelper = fileHelper;
}
/// <summary>
/// 专门为Case的文件上传 有可能有两个name 不支持H5 wangEditorFormFile 支持h5 wangEditorH5File
/// </summary>
/// <returns></returns>
[HttpPost]
public string UploadCompanyPhoto(IFormFile wangEditorFormFile = null, IFormFile wangEditorH5File = null)
{
//全部用/,windows支持/
return Upload(FileCategory.CompanyPhoto, wangEditorFormFile, wangEditorH5File);
} private string Upload(FileCategory fc ,IFormFile wangEditorFormFile = null, IFormFile wangEditorH5File = null)
{
if (wangEditorFormFile == null && wangEditorH5File == null)
{
return "error|无文件上传";
}
var file = wangEditorFormFile == null ? wangEditorH5File : wangEditorFormFile;
var result = _fileHelper.SaveFile(file, fc);
//判断是否错误
if (result == "false")
{
return "error|上传失败";
}
else
{
return "http://" + Request.Host.ToString() + "/" + FileHelper.GetFullPath(fc, result); ;
}
}
}

以上方法仅供参考

这是我新写的基于DotnetCore 1.1 写的一个简单的Demo : http://git.oschina.net/quan01994/UploadDemo

8.mvc core上传文件的更多相关文章

  1. .NET CORE上传文件到码云仓库【搭建自己的图床】

    .NET CORE上传文件到码云仓库[搭建自己的图床] 先建一个公共仓库(随意提交一个README文件或者.gitignore文件保证master分支的存在),然后到gitee的个人设置页面找到[私人 ...

  2. spring mvc(注解)上传文件的简单例子

    spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...

  3. Asp.Net Mvc异步上传文件的方式

    今天试了下mvc自带的ajax,发现上传文件时后端action接收不到文件, Request.Files和HttpPostedFileBase都接收不到.....后来搜索了下才知道mvc自带的Ajax ...

  4. .net Core 上传文件详解

    .net core 和.net framework上传文件有很多需要注意的地方 .net framework 上传文件用httppostedfilebase .net core 上传文件用 IForm ...

  5. ASP.NET Core MVC如何上传文件及处理大文件上传

    用文件模型绑定接口:IFormFile (小文件上传) 当你使用IFormFile接口来上传文件的时候,一定要注意,IFormFile会将一个Http请求中的所有文件都读取到服务器内存后,才会触发AS ...

  6. MVC:上传文件时限制文件类型

    之前写过一篇:MVC:上传文件 今天补充下一个功能:如何限制上传文件类型 文件类型可以在前段限制,但是太容易被绕过,最好还是在后端处理. 修改upload方法代码: [HttpPost] public ...

  7. MVC ajax 上传文件

    废话不多说,上代码: 用到的js文件: jquery.min.js jquery.easyui.min.js <input id="fileurl" onclick=&quo ...

  8. spring mvc CommonsMultipartResolver上传文件异常处理

    近期已经上线的项目出现了一个异常 严重: Servlet.service() for servlet JeeCmsAdmin threw exception org.apache.commons.fi ...

  9. 关于Extjs MVC模式上传文件的简单方式

    Extjs新手研究上传文件的事情估计是件很头痛的问题,毕竟,我就在头痛.最近两天一直在忙文件上传问题,终于小有收获. 用的是Extjs+MVC3.0+EF开发,语言为C#.前台window代码显示列内 ...

随机推荐

  1. find命令的拾遗

    find -maxdepth 1 -regextype posix-extended -type f -regex "\./${name}[-\.].*\.(gz|bz2|tgz|zip|t ...

  2. cocos2dx 3.x (单选,多选,复选checkBox按钮的实现) RadioButton

    // //  LandLordsMakeNewRoom.hpp //  MalaGame39 // //  Created by work on 2016/12/19. // //   #ifndef ...

  3. 基于BootStrap框架构建快速响应的GPS部标监控平台

    最近一个客户要求将gps部标平台移植到bootStrap框架作为前端框架,符合交通部796部标只是他们的一个基本要求,重点是要和他们的冷链云物流平台进行适配.我自己先浏览了客户的云物流平台的界面,采用 ...

  4. ADC 转换序列暂时难理解

    通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,程序出错的时候理论上都会产生一个co ...

  5. ferret不能创建txt文本

    设置文件夹权限为可读写也没用~郁闷中.

  6. 谈谈LoveLive SIF以及即将诞生的LL练习器

    由于课程需要和自身需求以及广大的LLer的需求,这个学期我将做一个造福全世界LLer的安卓app,它的名字是——还没想好(喂),总之是个LL SIF的练习器.什么?你问我LL SIF是什么?看来你不是 ...

  7. c 头文件<ctype.h>(一)

    头文件<ctype.h>中声明了一些测试字符的函数. 每个函数的参数均为int类型,参数的值必须是EOF或可用unsigned char类型表示的字符,函数返回值为int类型. 如果参数c ...

  8. 查看 Apache并发请求数及其TCP连接状态

    查看 Apache并发请求数及其TCP连接状态 (2011-06-27 15:08:36) 服务器上的一些统计数据: 1)统计80端口连接数 netstat -nat|grep -i "80 ...

  9. Android下OpenCV的环境搭建

    目录(?)[-] 前言 系统环境 相关工具 Android ADT环境搭建 Android SDK环境变量的配置 Android NDK的安装与配置 OpenCV for Android 环境搭建 基 ...

  10. java类

    1.四种访问控制符 private.不指明.protected.public 2.构造函数没有返回值 是因为构造函数默认返回的是类的实例对象.所以不需要写返回值 3.static static表示类拥 ...