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代码显示列内 ...
随机推荐
- django 1.7之后python manage.py syncdb没有了
在命令行输入python manage.py createsuperuser按照提示输入即可记得先初始化表. django>1.7 python manage.py makemigrations ...
- 选择App开发外包时,你该了解哪些法律常识?
随着App需求的激增,选择App外包服务的客户也多了起来.然而客户和开发方对于其中的法律条款却不甚了解,导致在服务过程中,时常会发生一些分歧和纠纷,最终致使项目搁浅. 为了普及App外包的法律常识,移 ...
- Magento后台简单更换favicon.ico
刚才需要更换网站的favicon.ico,就是浏览器url前面的那个小图标. 网上稍微搜搜一下,然后就震惊了,号多方法是替换文件的方法,而且文件散步在网站的各个角落. 其实,后台是有直接上传更换的方法 ...
- 跟着思维导图学习javascript
1.javascript 变量 2.javascript 运算符 3.javascript 数组 4.javascript 流程语句 5.javascript字符串函数 6.javascript 函数 ...
- Css定位之absolute_慕课网课程笔记
absolute和float 绝对定位和浮动有相似之处,即都有破坏性和包裹性,破坏性是指其会导致包裹自身的复原塌陷,包裹性是float的天赋技能,对于绝对定位来说,其会包括子元素 越独立越强大 1.去 ...
- 在设置app icon时的问题
APP 运行时遇到 the app icon set named appicon did not have any applicable content 是应该考虑是icon可能偏大
- 为什么Pojo类没有注解也没有spring中配置<bean>也能够被加载到容器中。
Spring的注入机制其实就是代替了new的这个过程(称为解耦). 写了一个Thread类,没有加注解@Component,但是可以正常运行,开始为了自圆其说,打通逻辑,猜测是StartThread中 ...
- 使用git
原文出处: 涂根华的博客 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候 ...
- ubuntu command
uninstall software: sudo apt-get purge openjdk*
- Android 短信广播接收相关问题
本人是Android新手,最近做了一个关于监听手机短信功能的应用,我在网上看资料了解到广播分为有序广播和无序广播,有序广播:无序广播又称普通广播,其中的利弊我也一时没搞清楚,我用的是有序广播实现的,具 ...