利用Asp.net MVC处理文件的上传下载

如果你仅仅只有Asp.net Web Forms背景转而学习Asp.net MVC的,我想你的第一个经历或许是那些曾经让你的编程变得愉悦无比的服务端控 件都驾鹤西去了.FileUpload就是其中一个,而这个控件的缺席给我们带来一些小问题。这篇文章主要说如何在Asp.net 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方法来查看文件是否被上传。但是在Asp.net 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();
  }
}

时间: 2024-08-31 02:20:41

利用Asp.net MVC处理文件的上传下载的相关文章

Asp.net实现MVC处理文件的上传下载功能实例教程_实用技巧

上传于下载功能是程序设计中非常常见的一个功能,在ASP.NET程序开发中有着非常广泛的应用.本文就以实例形式来实现这一功能. 一.概述 如果你仅仅只有Asp.net Web Forms背景转而学习Asp.net MVC的,我想你的第一个经历或许是那些曾经让你的编程变得愉悦无比的服务端控件都驾鹤西去了.FileUpload就是其中一个,而这个控件的缺席给我们带来一些小问题.这篇文章主要说如何在Asp.net MVC中上传文件,然后如何再从服务器中把上传过的文件下载下来. 二.实现方法 1.文件上传

asp.net文件批量上传下载代码与详细说明

asp教程.net文件批量上传下载代码与详细说明 private void DownLoadCompressFile()         {             //create file package             List<CompanyFileDomain> lists = new List<CompanyFileDomain>();             if (DeluxeGridFiles.SelectedKeys.Count > 0)     

PHP移动互联网开发笔记(5)——文件的上传下载

一.文件的上传 1.客户端设置: (1).在 标签中将enctype和method两个属性指明相应的值. Enctype="multipart/form-data"; Method="POST" (2).form表单中设置一个hidden类型的input框,其中name的值为MAX_FILE_SIZE的隐藏值 2.服务器端设置: (1).$_FILES多维数组:用于存储各种上传文件有关的信息 (2).文件上传与php配置文件的设置,如以下php.ini文件中的一些指

servlet + JSP+ mysql实现文件的上传下载等

问题描述 servlet + JSP+ mysql实现文件的上传下载等 1.我想搞一个网页,可以点击一个链接便可以实现下载mysql数据库对应的word文档,还可以上传word文档到mysql库中: 2.在网页中上传图片保存到数据库,并可在上传完毕之后,直接在线观看其图片. 本人在自编一个程序,由于技术有限,不能实现以上功能,望大家能指点一下,最好能给出一份源码让我参考下. 解决方案 开源中国上的一个类似项目讲解,参考:http://www.oschina.net/question/234345

ASP.NET2.0中全面实现文件图片上传下载处理

asp.net|上传|下载 1.最简单的单文件上传(没花头)2.多文件上传3.客户端检查上传文件类型(以上传图片为例)4.服务器端检查上传文件类型(以上传图片为例) 5.服务器端检查上传文件类型(可以检测真正文件名) 6.上传文件文件名唯一性处理(时间戳+SessionID)7.上传图片生成等比例缩略图8.上传图片加水印(文字水印,图片水印,文字+图片水印)9. 1.最简单的单文件上传(没花头) 效果图:说明:这是最基本的文件上传,在asp.net1.x中没有这个FileUpload控件,只有h

PHP文件的上传下载

一.文件的上传 1.客户端设置: (1).在 标签中将enctype和method两个属性指明相应的值.&nb [-] 一.文件的上传 1.客户端设置: (1).在 二.文件下载 简单文件下载只需要使用HTML的链接标记,并将属性href的URL值指定下载的文件即可.这种方法只能处理一些浏览器不能识别的MIME类型文件. 为了提高安全性,不希望在a标签中给出文件链接,则必须向浏览器发送必要的头信息,我们可以使用如下代码. 三.文件函数库 touch 设置文件的访问和修饰时间 bool touch

C# 文件操作(上传 下载 删除 文件列表...)

上传|下载 using System.IO; 1.文件上传----------如下要点:HTML部分:<form id="form1" runat="server" method="post" enctype="multipart/form-data"><input id="FileUpLoad" type="file" runat="server"

applet实现大文件FTP上传下载的功能

问题描述 packageyp;importjava.applet.Applet;importjava.io.File;importjavax.swing.JButton;importjavax.swing.JFileChooser;importjavax.swing.filechooser.FileFilter;/***说明:本APPLET只是测试大文件FTP上传可行性*至于其他功能比如FTP下载.删除.FTP服务器文件列表可调用ContinueFTP相应功能.*/publicclassFile

怎么样用JAVA 实现文件的上传下载?

问题描述 哪位高手帮帮忙,我现在需要用eclipse7.1开发一个小模块,里面需要有上传下载功能,(例如上传一个word文档,下载文档)哪为高手告诉我应该怎么做?越详细越好.用的服务器是tomcat5. 解决方案 解决方案二:哦11111知道了解决方案三:数据库用的Oracle9i.谢谢了~~急求!解决方案四:这个好难的类解决方案五:使用或参考smartupload.jar解决方案六:struts里面不是有包含文件上传的功能吗FormFile解决方案七:我就知道要用到这个插件JSPSmart,具