- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
【译】利用A MVC处理文件的上传下载
如果你仅仅只有A Web Forms背景转而学习A MVC的,我想你的第一个经历或许是那些曾经让你的编程变得愉悦无比的服务端控件都驾鹤西去了.FileUpload就是其中一个,而这个控件的缺席给我们带来一些小问题。这篇文章主要说如何在A MVC中上传文件,然后如何再从服务器中把上传过的文件下载下来.
在Web Forms中,当你把一个FileUpload控件拖到设计器中,你或许没有注意到在生成的HTML中会在form标签中加入一条额外属性enctype=multipart/form-data. 而FileUpload控件本身会生成为input type=”file” /,在MVC的view里,有许多种方法可以做到同样效果,第一种的HTML如下:
form action=/ method=post enctype=multipart/form-data
input type=file name=FileUpload1 /br /
input type=submit name=Submit id=Submit value=Upload /
/form
注意form标签已经包括了enctype标签,而method属性则设为”post”,这样设置并不多于因为默认的提交时通过HTTP get方式进行的。下面这种方式,使用Html.BeginForm()扩展方法,会生成和上面同样的HTML:
%
using (Html.BeginForm(, home, FormMethod.Post, new {enctype=multipart/form-data}))
{%
input type=file name=FileUpload1 /br /
input type=submit name=Submit id=Submit value=Upload /
% }%
注意input type=”file”标签的name属性,我们在后面再讨论,上面代码会如下图:
OK,现在我们可以浏览本地文件然后通过Upload提交按钮将文件提交到服务器端,下一步就是在服务器端处理上传的文件,在使用fileUpload控件时,你可以很轻松的通过FileUpload的hasFile方法来查看文件是否被上传。但是在A MVC中貌似就不是这么方便了,你会和原始的HTTP更接近一些,然而,一个扩展方法可以处理这些:
public static bool HasFile(this HttpPostedFileBase file)
{
return (file != null file.ContentLength 0) ? true : false;
}
当你看到对应的Controller类的代码时,你会发现Request对象作为HttpRequestBase类型的一个属性存在。HttpReuqestBase其实是HTTP请求的一个封装,暴漏了很多属性,包括Files collection(其实是HttpFileCollectionBase的集合),在集合中的每一个元素都是HttpPostedFileBase的集合,扩展方法是用于确保上传的文件是否存在。实际上,这和FileUpload.HasFile()方法的工作原理一致。
在Controller Action中使用起来其实很容易:
public class HomeController : Controller
{
public ActionResult Index()
{
foreach (string upload in Request.Files)
{
if (!Request.Files[upload].HasFile()) continue;
string path = AppDomain.CurrentDomain.BaseDirectory + uploads/;
string filename = Path.GetFileName(Request.Files[upload].FileName);
Request.Files[upload].SaveAs(Path.Combine(path, filename));
}
return View();
}
}
多文件上传
或许你已经比我更早的想到如何更好的将Request.Files作为一个集合使用。这意味着它不仅仅只能容纳一个文件,而能容纳多个,我们将上面的View改为如下:
%
using (Html.BeginForm(, home, FormMethod.
您可能关注的文档
- awk合并不同文件指定字段-20150705.pdf
- 常见接头形式.ppt
- 常见控件测试.ppt
- 常见滤芯和其原理.ppt
- AWS_A2.4_焊缝符号和形状.pdf
- AWT中常用布局管理器.doc
- Azure Cloud Services部署环境平台相关元模型.docx
- A型肉毒毒素受体结合区Hc在重组SFV复制子载体中表达.pdf
- 常见排序算法 - Fangzhen - 博客园.pdf
- 常见生物质热解与燃烧特性的试验研究.pdf
- 人教版初中物理八年级下册第十二章《简单机械》检测题 (有答案).docx
- 人教版六年级数学上册第二单元 位置与方向(二)单元测试 (2).docx
- 人教版九年级化学下册第八单元金属和金属材料检测题 (word版有答案).docx
- 人教版初中数学七年级下册第八章二元一次方程组定向测试试卷(带解析).docx
- 人教版化学九年级下册同步提优练习:第十单元 课题2 酸和碱的中和反应(word版有答案).docx
- 人教版六年级数学上册第一单元 分数乘法单元测试 (3).docx
- 人教版化学九年级下册同步提优练习:第八单元 金属和金属材料 综合提升卷(word版有答案).docx
- 人教版九年级化学下册第十单元《酸和碱》测试题(word版 含答案).docx
- 人教版九年级全一册第二十二章能源与可持续发展章末综合练(word版含解析).docx
- 人教版化学九年级下册同步提优练习:第八单元 课题3 金属资源的利用和保护(word版有答案).docx
文档评论(0)