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

 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. Sqlserver 循环表

    CREATE TABLE dbo.[User] ( UID BIGINT IDENTITY ,Name ) NOT NULL ,Pwd ) NOT NULL ,CONSTRAINT PK_User P ...

  2. 批量修改一张表格的多个sheet名

    例如这样的函数: Sub aab() For x = 4 To 5 Sheets(x).Name = "10" & Format(x - 3, "00" ...

  3. 简单的js菜单

    <!DOCTYPE html> <html> <head> <title>hovertree</title><base target= ...

  4. spark 基本操作

    读取文件的数据 使用的数据:https://codeload.github.com/xsankar/fdps-v3/zip/master 读取单个文件的数据 case class Employee(E ...

  5. sql中datetime 和 timestamp

    datetime 1.允许为空值,可以自定义值,系统不会自动修改其值. 2.不可以设定默认值,所以在不允许为空值的情况下,必须手动指定datetime字段的值才可以成功插入数据. 3.虽然不可以设定默 ...

  6. Linux -- objdump二进制文件比较

    objdump工具用来显示二进制文件的信息,就是以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息. 常用参数说明 -f 显示文件头信息 -D 反汇编所有section (-d反汇编特定se ...

  7. Hosts文件

    Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开, 其作用:就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时, ...

  8. c语言第8次作业

    #include<stdio.h> int main() { ]={}; int m; ; ;m<;m++) { a[m]=m+; !=&&a[m]%!=) n++; ...

  9. Html5特性及简介

  10. spring ioc三种注入方式

    spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容 ...