博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET 5探险(2):上传文件
阅读量:5089 次
发布时间:2019-06-13

本文共 2028 字,大约阅读时间需要 6 分钟。

(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)

题记:在ASP.NET 5(MVC 6)中处理上传文件的方式和之前有所不同。

在MVC 5之前的版本中上传文件,有两种方式。

1,直接对Request.Files进行访问获取HttpPostedFileBase,如下面代码所示:

[HttpPost]public ActionResult Upload(){    string path = @"D:\Temp\";     HttpPostedFileBase photo = Request.Files["photo"];     if(photo != null)        photo.SaveAs(path + photo.FileName);     return RedirectToAction("Index");}

2,通过模型绑定获取HttpPostedFileBase,如下面代码所示:

[HttpPost]public ActionResult Upload(HttpPostedFileBase photo){    string path = @"D:\Temp\";         if(photo != null)        photo.SaveAs(path + photo.FileName);     return RedirectToAction("Index");}

更多详细的用法可以参考CodeProject的这篇文章《》。

在MVC 6中同样也是有两种方式,只是提供的类和之前有所不同,没有HttpPostedFileBase,取而代之的是IFormFile,且额外的一些文件信息放到了ContentDispositionHeaderValue。

1,直接使用Request.Form.Files访问IFormFile,如下代码所示:

[HttpPost]public ActionResult Upload(){    string path = @"D:\Temp\";    IFormFile photo = Request.Form.Files["photo"];    if (photo != null)    {        var parsedContentDisposition = ContentDispositionHeaderValue.Parse(photo.ContentDisposition);        var originalName = parsedContentDisposition.FileName.Replace("\"", "");        photo.SaveAs(path + originalName);    }    return RedirectToAction("Index");}

大家可以注意到了,我对parsedContentDisposition.FileName进行了一个替换处理。这是因为FileName这个属性值会带有前后双引号。我不知道这个是个bug还是故意设计,过一会去提个Issue问问。

2,通过模型绑定获取IFormFile,如下面代码所示:

[HttpPost]public ActionResult Upload(IFormFile photo){    string path = @"D:\Temp\";    if (photo != null)    {        var parsedContentDisposition = ContentDispositionHeaderValue.Parse(photo.ContentDisposition);        var originalName = parsedContentDisposition.FileName.Replace("\"", "");        photo.SaveAs(path + originalName);    }    return RedirectToAction("Index");}

另外,还需要注意的是,在MVC 6中已经无法用Server.MapPath这样的方法来得到虚拟地址对应的物理地址了,只能通过IHostingEnvironment.MapPath来获取(此方法是一个扩展方法)。而要使用IHostingEnvironment的实例,必须把其注入到Controller中(IHostingEnvironment是默认被系统注册的,无需也无法显式注册)。经过我的试验,只能通过构造器注入,而无法通过[Activate]来属性注入。

转载于:https://www.cnblogs.com/redmoon/p/4601133.html

你可能感兴趣的文章
cocos2dx - 在MFC中使用cocos2dx
查看>>
网络通信协议之ICMP
查看>>
Oracle+Ado.Net(二)
查看>>
1048. Find Coins (25)
查看>>
1097. Deduplication on a Linked List (25)
查看>>
HIS系统结算后,没有更新单据状态为“已结算”
查看>>
java Comparator和Comparable(比较器)
查看>>
暗恋时最心酸的一刻
查看>>
myeclipse8.5安装axis2 1.3
查看>>
爪哇国新游记之二十六----迷宫寻路
查看>>
centos6.5安装supervisor
查看>>
R语言适配问题集锦
查看>>
map和string的使用方法
查看>>
PowerShell
查看>>
界面使用webview,并且webview里面有图片进行自动切换导致界面上滚动条卡顿。...
查看>>
从大公司做.NET 开发跳槽后来到小公司的做.NET移动端微信开发的个人感慨
查看>>
在Thinkphp中使用AJAX实现无刷新分页
查看>>
磁盘配额(Quota)的应用与实践
查看>>
(转) IOS开发者证书制作
查看>>
使用super调用父类的构造方法
查看>>