怎么在Asp.net中利用MVC处理实现一个文件上传下载功能

  介绍

怎么在Asp.net中利用MVC处理实现一个文件上传下载功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强>一、概述

如果你仅仅只有Asp.net Web表单背景转而学习Asp.net MVC的,我想你的第一个经历或许是那些曾经让你的编程变得愉悦无比的服务端控件都驾鹤西去了.FileUpload就是其中一个,而这个控件的缺席给我们带来一些小问题。这篇文章主要说如何在Asp.net MVC中上传文件,然后如何再从服务器中把上传过的文件下载下来。

<强>二,实现方法

<强> 1。文件上传

在Web表单中,当你把一个FileUpload控件拖到设计器中,你或许没有注意到在生成的HTML中会在表单标签中加入一条额外属性enctype=岸嗖糠?form-data"。而FileUpload控件本身会生成为& lt;输入类型=拔募?祝辞,在MVC的视图里,有许多种方法可以做到同样效果,第一种的HTML如下:

& lt;形式action=??方法=皃ost"enctype=岸嗖糠?form-data"比;   & lt;输入类型=癴ile"name=癋ileUpload1"/祝辞;& lt; br/比;   & lt;输入类型=皊ubmit"name=癝ubmit"id=癝ubmit"值=https://www.yisu.com/zixun/"上传"/>

注意形式标签已经包括了enctype标签,而方法属性则设为“后”,这样设置并不多于因为默认的提交时通过HTTP get方式进行的。下面这种方式,使用Html.BeginForm()扩展方法,会生成和上面同样的HTML:

& lt; %   使用(Html.BeginForm (““,“home", FormMethod。后,新{enctype=岸嗖糠?form-data"}))   {%比;   & lt;输入类型=癴ile"name=癋ileUpload1"/祝辞;& lt; br/比;   & lt;输入类型=皊ubmit"name=癝ubmit"id=癝ubmit"值=https://www.yisu.com/zixun/"上传"/>         

注意& lt;输入类型=拔募痹诒昵┑拿质粜?我们在后面再讨论
好的,现在我们可以浏览本地文件然后通过上传提交按钮将文件提交到服务器端,下一步就是在服务器端处理上传的文件,在使用fileUpload控件时,你可以很轻松的通过fileUpload的hasFile方法来查看文件是否被上传。但是在Asp.net MVC中貌似就不是这么方便的了,你会和原始的HTTP更接近一些,然而,一个扩展方法可以处理这些:

公共静态bool HasFile(这HttpPostedFileBase文件)
  {
  返回(文件!=零,,文件。ContentLength祝辞0),# 63;真:假;
  }

当你看到对应的控制器类的代码时,你会发现请求对象作为HttpRequestBase类型的一个属性存在.HttpReuqestBase其实是HTTP请求的一个封装,暴漏了很多属性,包括文件集合(其实是HttpFileCollectionBase的集合),在集合中的每一个元素都是HttpPostedFileBase的集合,扩展方法是用于确保上传的文件是否存在。实际上,这和FileUpload.HasFile()方法的工作原理一致。

在控制器动作中使用起来其实很容易:

 & lt; %
  使用(Html.BeginForm (““,“home", FormMethod。后,新{enctype=岸嗖糠?form-data"}))
  {%比;
  & lt;输入类型=癴ile"name=癋ileUpload1"/祝辞;& lt; br/比;
  & lt;输入类型=癴ile"name=癋ileUpload2"/祝辞;& lt; br/比;
  & lt;输入类型=癴ile"name=癋ileUpload3"/祝辞;& lt; br/比;
  & lt;输入类型=癴ile"name=癋ileUpload4"/祝辞;& lt; br/比;
  & lt;输入类型=癴ile"name=癋ileUpload5"/祝辞;& lt; br/比;
  & lt;输入类型=皊ubmit"name=癝ubmit"id=癝ubmit"值=https://www.yisu.com/zixun/"上传"/>
  
  
  

在控制器的代码中已经检查了是否所有的文件上传框中都有文件,所以即使对于多文件上传,我们也不再需要修改控制器的代码,注意每一个& lt;输入类型=拔募痹诙加胁煌拿质粜?如果你需要调用其中一个,比如说,你需要引用第三个输入框只需要使用:Request.Files [“FileUpload3"] .

怎么在Asp.net中利用MVC处理实现一个文件上传下载功能