8.mvc core上传文件
以下方法均是个人,仅供参考
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上传文件的更多相关文章
- .NET CORE上传文件到码云仓库【搭建自己的图床】
.NET CORE上传文件到码云仓库[搭建自己的图床] 先建一个公共仓库(随意提交一个README文件或者.gitignore文件保证master分支的存在),然后到gitee的个人设置页面找到[私人 ...
- spring mvc(注解)上传文件的简单例子
spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...
- Asp.Net Mvc异步上传文件的方式
今天试了下mvc自带的ajax,发现上传文件时后端action接收不到文件, Request.Files和HttpPostedFileBase都接收不到.....后来搜索了下才知道mvc自带的Ajax ...
- .net Core 上传文件详解
.net core 和.net framework上传文件有很多需要注意的地方 .net framework 上传文件用httppostedfilebase .net core 上传文件用 IForm ...
- ASP.NET Core MVC如何上传文件及处理大文件上传
用文件模型绑定接口:IFormFile (小文件上传) 当你使用IFormFile接口来上传文件的时候,一定要注意,IFormFile会将一个Http请求中的所有文件都读取到服务器内存后,才会触发AS ...
- MVC:上传文件时限制文件类型
之前写过一篇:MVC:上传文件 今天补充下一个功能:如何限制上传文件类型 文件类型可以在前段限制,但是太容易被绕过,最好还是在后端处理. 修改upload方法代码: [HttpPost] public ...
- MVC ajax 上传文件
废话不多说,上代码: 用到的js文件: jquery.min.js jquery.easyui.min.js <input id="fileurl" onclick=&quo ...
- spring mvc CommonsMultipartResolver上传文件异常处理
近期已经上线的项目出现了一个异常 严重: Servlet.service() for servlet JeeCmsAdmin threw exception org.apache.commons.fi ...
- 关于Extjs MVC模式上传文件的简单方式
Extjs新手研究上传文件的事情估计是件很头痛的问题,毕竟,我就在头痛.最近两天一直在忙文件上传问题,终于小有收获. 用的是Extjs+MVC3.0+EF开发,语言为C#.前台window代码显示列内 ...
随机推荐
- LeetCode Verify Preorder Sequence in Binary Search Tree
原题链接在这里:https://leetcode.com/problems/verify-preorder-sequence-in-binary-search-tree/ 题目: Given an a ...
- Python学习【第六篇】运算符
运算符 算数运算: a = 21 b = 10 c = 0 c = a + b print ("1 - c 的值为:", c) c = a - b print ("2 - ...
- Linux流量监控工具 - iftop
iftop工具简述 今天看到一流量监控工具,觉得不错,就在自家服务器上装了一下,记录一下,留以后之需: 在类Unix系统中可以使用top查看系统资源.进程.内存占用等信息.查看网络状态可以使用nets ...
- stream数据流
首先必须先要了解Buffer,Buffer是js和c++的结合体,类数组,通常与Stream一起用: 1. (1).Buffer是个类,因此可以构建成对象 (2).buf具有数组的性质 字符串转换成二 ...
- 使用NUGet自动下载(还原)项目中使用的包
签出完整项目后,在解决方案名称上点右键,选择"启用NuGet程序包还原",如下图: 出现询问,当然要点是:是 当完成后,会发现在解决方案中,多出".nuget" ...
- XML和JSON数据格式对比
概念 XML 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语 ...
- HDU 5055 Bob and math problem(简单贪心)
http://acm.hdu.edu.cn/showproblem.php?pid=5055 题目大意: 给你N位数,每位数是0~9之间.你把这N位数构成一个整数. 要求: 1.必须是奇数 2.整数的 ...
- [原创]java WEB学习笔记107:Spring学习---AOP切面的优先级,重用切点表达式
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- .net实现webservice简单实例分享
原理:WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互.作用:主要用 ...
- C++文件流类与文件流对象
文件流是以外存文件为输入输出对象的数据流.输出文件流是从内存流向外存文件的数据,输入文件流是从外存文件流向内存的数据.每一个文件流都有一个内存缓冲区与之对应. 请区分文件流与文件的概念,不用误以为文件 ...