课程设计需要实现上传文件模块,本来ASP.NET是有内置的控件,但是ASP.NET MVC没有,所以就有两种方法:自定义和采用第三方插件。由于时间的关系,故采用第三方插件:uploadify。

uploadify的使用必须下载相应的文件,下载地址:http://www.uploadify.com/download/

先是视图:

  1. <asp:Content ID="Content3" ContentPlaceHolderID="head" runat="server">
  2. <script src="/Scripts/swfobject.js" type="text/javascript"></script>
  3. <script src="/Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
  4. <script src="/Scripts/jquery.uploadify.v2.1.0.min.js" type="text/javascript"></script>
  5. <link href="/Content/uploadify.css" rel="stylesheet" type="text/css" />
  6.  
  7. <style type="text/css">
  8. .SuccessText
  9. {
  10. color: Red;
  11. font-weight: bold;
  12. }
  13.  
  14. .FaileText
  15. {
  16. color: Green;
  17. font-weight: bold;
  18. }
  19. </style>
  20.  
  21. <script type="text/javascript">
  22. $(function () {
  23. $('#fileInput1').uploadify({
  24. 'uploader': '/Content/uploadify.swf',
  25. 'script': '/Home/LoadFile',
  26. 'folder': '/UploadFiles',
  27. 'cancelImg': '/Content/cancel.png',
  28. 'sizeLimit': 1024 * 1024 * 4, //4M
  29. 'multi': true,
  30. 'onComplete': Complete
  31. });
  32.  
  33. });
  34. function Complete(event, queueID, fileObj, response, data) {
  35. if (response != "") {
  36. showInfo("成功上传" + response, true);
  37. }
  38. else {
  39. showInfo("文件上传出错!", false);
  40. }
  41. }
  42. //显示提示信息,SuccessText为绿色,即上传成功;FalseText为红色,即上传失败 function showInfo(msg, type) {
  43. var msgClass = type == true ? "SuccessText" : "FaileText";
  44. $("#result").removeClass();
  45. $("#result").addClass(msgClass);
  46. $("#result").html(msg);
  47. }
  48. //如果点击‘导入文件’时选择文件为空,则提示
  49. function checkLoad() {
  50. if ($.trim($('#fileInput1Queue').html()) == "") {
  51. alert('请先选择要上传的文件!');
  52. return false;
  53. }
  54. return true;
  55. }
  56. </script>
  57. </asp:Content>
  58.  
  59. <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
  60.  
  61. <div>
  62. <p>
  63. <input id="fileInput1" name="fileInput1" type="file" />
  64. </p>
  65. <p style="margin-top: 5px; font-size: 14px; font-weight: bold;">
  66. <a href="javascript:if(checkLoad()){$('#fileInput1').uploadifySettings('scriptData',{'name':$('#test').val()});$('#fileInput1').uploadifyUpload();}">上传</a>
  67. </p>
  68. <p style="margin-top: 5px; font-size: 14px; font-weight: bold;"><span id="result"></span></p>
  69. </div>
  70. </asp:Content>

考虑到其他人的工作是基于ASP.NET引擎的,所以我的视图也是采用该视图引擎。
      视图中最重要的部分就是javascript代码部分:

uploader:就是uploadify.swf文件的相对路径,所谓的swf文件就是一个带有文字("浏览")的按钮,该按钮点开就是一个文件对话框,供用户选择要上传的文件。

script:后台处理程序的相对路径,也就是我们用户处理上传文件数据的Action。

folder:上传文件存放的目录。

cancelImg:该图片点击可以取消上传。

sizeLimit:上传文件的大小限制。

multi:设置为true时可以同时上传多个文件。

onComplete:文件上传完后的触发事件,一共有5个参数,重点在于后面两个:response为后台处理程序返回的值,如果为空,说明文件上传失败。data有两个属性:fileCount表示剩余没有上传完成的文件的个数,speed表示文件上传的平均速率(kb/s)。我们这里的onComplete函数很简单,就是简单的判断文件是否上传成功。

还有两个很重要的属性:fileExt和fileDesc。它们必须一起使用,并且值是一样的,因为它们规定的就是选择上传的文件类型。fileExt设置可以选择的文件类型,其实就是文件的扩展名。fileDesc用来设置选择文件对话框中的提示文本,也就是我们一般在选择文件的时候,都会有一个文件类型,而fileDesc能人为规定该文件类型是什么。这里之所以没有用到这两个属性,是因为我默认选择所有文件,但如果模块只要求上传图片格式,那么我们就可以通过这两个属性达到文件过滤了。

效果图:

值得注意的是,如果出现这样的界面:

说明swfobject.js没有添加正确。

如果是这样:

则是jquery-1.4.1.min.js或者jquery.uploadify.v2.1.0.min.js没有添加正确。这种情况可以选择文件,但是无法上传,之前出现这样的错误,导致我以为是我的浏览器无法上传文件,以致走了很多弯路,搞了很多配置,其实就是没有正确导入相应的js文件。

接着就是Action:

  1. [HttpPost]
  2. public ContentResult LoadFile(HttpPostedFileBase FileData, string folder, string name)
  3. {
  4. string result = "";
  5. if (null != FileData)
  6. {
  7. try
  8. {
  9. result = Path.GetFileName(FileData.FileName);//获得文件名
  10. string extension = Path.GetExtension(FileData.FileName);//获得文件扩展名
  11. string saveName = FileData.FileName + extension;//实际保存文件名
  12. saveFile(FileData, folder, saveName);//保存文件
  13. }
  14. catch
  15. {
  16. result = "";
  17. }
  18. }
  19. return Content(result);
  20. }
  21.  
  22. [NonAction]
  23. private void saveFile(HttpPostedFileBase postedFile, string filepath, string saveName)
  24. {
  25. string phyPath = Request.MapPath("~" + filepath + "/");
  26. if (!Directory.Exists(phyPath))
  27. {
  28. Directory.CreateDirectory(phyPath);
  29. }
  30. try
  31. {
  32. postedFile.SaveAs(phyPath + saveName);
  33. }
  34. catch (Exception e)
  35. {
  36. throw new ApplicationException(e.Message);
  37.  
  38. }
  39. }

这部分的内容很简单,就是从FileData中取出文件名和扩展名,然后保存起来而已。由于涉及到文件I/O,所以需要添加命名空间System.IO。
       大概就是这样,具体的大家还是得去看官方文档。

ASP.NET MVC上传文件----uploadify的使用的更多相关文章

  1. asp.net MVC 上传文件 System.Web.HttpException: 超过了最大请求长度

    APS.NET MVC 上传文件出现  System.Web.HttpException: 超过了最大请求长度 这个问题 原因是 默认最大上传文件大小为4096,而我提交的文件太大了. 解决方案:修改 ...

  2. ASP.NET MVC上传文件

    最近参考网络资料,学习了ASP.NET MVC如何上传文件.最基本的,没有用jQuery等技术. 1.定义Model public class TestModel    {        [Displ ...

  3. asp.net mvc 上传文件

    转至:http://www.cnblogs.com/fonour/p/ajaxFileUpload.html 0.下载 http://files.cnblogs.com/files/fonour/aj ...

  4. ASP.NET MVC上传文件 未显示页面,因为请求实体过大。解方案

    在Dropzone中设置   maxFilesize: 350, //MB 但上传的文件没有到最大限定350MB,就报出来 未显示页面,因为请求实体过大的错误 Web.config中设置  maxAl ...

  5. IIS ASP.NET MVC 上传文件到NAS目录

    项目要求,网站用户上传的文件,存储到服务器挂接的NAS磁盘里,死活也写不进去,一直提示 System.IO.IOException: 指定的服务器无法运行请求的操作 阿里的客服也问过了, 一群只知道发 ...

  6. ASP.NET MVC上传文件的几种方法

    1.Form表单提交 <p>Form提交</p> <form action="@Url.Action("SavePictureByForm" ...

  7. MVC上传文件

    ASP.NET MVC上传文件是必段撑握的知识.加强训练才是.以前Insus.NET曾使用第三方MyAjaxForm.js :http://www.cnblogs.com/insus/p/378548 ...

  8. asp.net mvc上传头像加剪裁功能

    原文:asp.net mvc上传头像加剪裁功能 正好项目用到上传+剪裁功能,发上来便于以后使用. 我不能告诉你们其实是从博客园扒的前台代码,哈哈. 前端是jquery+fineuploader+jqu ...

  9. Spring MVC上传文件

    Spring MVC上传文件 1.Web.xml中加入 <servlet> <servlet-name>springmvc</servlet-name> <s ...

随机推荐

  1. fullcalendar日历控件集合知识

    1.基本的语法: 首先,fullcalendar和JQUERY一样,以面向对象的方式来组织代码.当然,这里的面向对象不过指能够把整个fullcalendar理解为一个类,这个类里包含有非常多的属性.方 ...

  2. 乐在其中设计模式(C#) - 组合模式(Composite Pattern)

    原文:乐在其中设计模式(C#) - 组合模式(Composite Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 组合模式(Composite Pattern) 作者:weba ...

  3. MATLAB描绘极坐标图像——polar

    polar可用于描绘极坐标图像. 最简单而经常使用的命令格式:POLAR(THETA, RHO)  当中,THETA是用弧度制表示的角度,RHO是相应的半径. 例: a=-2*pi:.001:2*pi ...

  4. 探索WebKit核心(一)------ 新秀开始

    为什么WebKit 现在,研究人员WebKit越来越多的人,我不能逃脱,其中还增加.WebKit也多亏了流行的浏览器和WebOS乱斗.随着Palm WebOS, Chrome OS, Firefox ...

  5. Alamofire网络库进阶教程

    本章节由CocoaChina翻译组成员星夜暮晨(博客)翻译自raywenderlich:Intermediate Alamofire Tutorial,敬请勘误. 欢迎回到我们的 Alamofire ...

  6. C++指针和引用简介

    摘要 本文介绍C++指针和概念引用 这是一个指针 指针的类型 指针所指向的类型 指针表达式 指针与函数 什么是引用 指针引用差别 指针和引用的同样点和不同点 **什么是指针** 指针就是一个存放地址的 ...

  7. C#软件开发实例.个人定制自己的屏幕抓图工具(八)加入了截图功能键盘

    章文件夹 (一)功能概览 (二)创建项目.注冊热键.显示截图主窗体 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)加入配置管理功能 (七)加入放大镜的功 ...

  8. Android属于查询执行情况的电话号码

    这部分是昨天学习,但是因为眼所以现在到眼睛超负荷,以后要合理规划时间. 现在里面的手机号码归属地查询主要通过两种途径:1.网络查询.2.匹配本地归属地数据库. 我认为最好的两个方法的结合,在进行联网查 ...

  9. [Unity3D]Unity3D游戏开发3D选择场景中的对象,并显示轮廓效果强化版

    大家好,我是秦培,欢迎关注我的博客,我的博客地址blog.csdn.net/qinyuanpei. 在上一篇文章中,我们通过自己定义着色器实现了一个简单的在3D游戏中选取.显示物体轮廓的实例. 在文章 ...

  10. springmvc 接收对象 滴灌摘要

    js 对象 该阵列看起来像 我明白http://blog.csdn.net/baicp3/article/details/12752255本文 我们指示样品棒 data3一个js对象.遗嘱java当代 ...