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

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

先是视图:

<asp:Content ID="Content3" ContentPlaceHolderID="head" runat="server">
<script src="/Scripts/swfobject.js" type="text/javascript"></script>
<script src="/Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.uploadify.v2.1.0.min.js" type="text/javascript"></script>
<link href="/Content/uploadify.css" rel="stylesheet" type="text/css" /> <style type="text/css">
.SuccessText
{
color: Red;
font-weight: bold;
} .FaileText
{
color: Green;
font-weight: bold;
}
</style> <script type="text/javascript">
$(function () {
$('#fileInput1').uploadify({
'uploader': '/Content/uploadify.swf',
'script': '/Home/LoadFile',
'folder': '/UploadFiles',
'cancelImg': '/Content/cancel.png',
'sizeLimit': 1024 * 1024 * 4, //4M
'multi': true,
'onComplete': Complete
}); });
function Complete(event, queueID, fileObj, response, data) {
if (response != "") {
showInfo("成功上传" + response, true);
}
else {
showInfo("文件上传出错!", false);
}
}
//显示提示信息,SuccessText为绿色,即上传成功;FalseText为红色,即上传失败 function showInfo(msg, type) {
var msgClass = type == true ? "SuccessText" : "FaileText";
$("#result").removeClass();
$("#result").addClass(msgClass);
$("#result").html(msg);
}
//如果点击‘导入文件’时选择文件为空,则提示
function checkLoad() {
if ($.trim($('#fileInput1Queue').html()) == "") {
alert('请先选择要上传的文件!');
return false;
}
return true;
}
</script>
</asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <div>
<p>
<input id="fileInput1" name="fileInput1" type="file" />
</p>
<p style="margin-top: 5px; font-size: 14px; font-weight: bold;">
<a href="javascript:if(checkLoad()){$('#fileInput1').uploadifySettings('scriptData',{'name':$('#test').val()});$('#fileInput1').uploadifyUpload();}">上传</a>
</p>
<p style="margin-top: 5px; font-size: 14px; font-weight: bold;"><span id="result"></span></p>
</div>
</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:

       [HttpPost]
public ContentResult LoadFile(HttpPostedFileBase FileData, string folder, string name)
{
string result = "";
if (null != FileData)
{
try
{
result = Path.GetFileName(FileData.FileName);//获得文件名
string extension = Path.GetExtension(FileData.FileName);//获得文件扩展名
string saveName = FileData.FileName + extension;//实际保存文件名
saveFile(FileData, folder, saveName);//保存文件
}
catch
{
result = "";
}
}
return Content(result);
} [NonAction]
private void saveFile(HttpPostedFileBase postedFile, string filepath, string saveName)
{
string phyPath = Request.MapPath("~" + filepath + "/");
if (!Directory.Exists(phyPath))
{
Directory.CreateDirectory(phyPath);
}
try
{
postedFile.SaveAs(phyPath + saveName);
}
catch (Exception e)
{
throw new ApplicationException(e.Message); }
}

这部分的内容很简单,就是从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. 先学习Oracle 11g的Automatic Diagnostic Repository新功能

    Oracle 11g之前.当数据库出现故障,通常情况下,第一次需要看alert刊物.什么,看看哪些记录错误,您可以给我们的提示.alert文件名 是alert_<ORACLE_SID>.l ...

  2. FTP上传文件时 System.Net.WebException: 基础连接已经关闭: 接收时发生错误。

    在c#中使用HttpWebRequest时,频繁请求一个网址时,过段时间就会出现“基础连接已经关闭: 接收时发生意外错误”的错误提示.将webRequest的属性设置成下面的,经测试可以解决.Syst ...

  3. 【Android进阶】判断网络连接状态并自动界面跳转

    用于判断软件打开时的网络连接状态,若无网络连接,提醒用户跳转到设置界面 /** * 设置在onStart()方法里面,可以在界面每次获得焦点的时候都进行检测 */ @Override protecte ...

  4. 菜鸟教程工具(三)——Maven自己主动部署Tomcat

    书连接至背面,在博客上,他介绍了如何使用Maven该项目包,这篇文章说,关于如何使用Maven会踢war部署包Tomcat.而不是手动copy过去. 眼下比較流行的方式有两种:一种是利用Tomcat官 ...

  5. VS2015 C#6.0

    VS2015 C#6.0 中的那些新特性 VS2015在自己机器上确实是装好了,(全部安装的话,在Java SE 开发工具包 会卡顿很长时间,我直接关闭,然后重启电脑,重新修复安装搞定), 想来体验一 ...

  6. MMTool制作Ozmosis引导BIOS完美引导OS X系统

    Ozmosis引导是德国黑苹果爱好者制作的一个引导程序,目前仍处于测试版,有了它,你可以不用再使用四叶草.变色龙之类引导工具,相对而言它更象白苹果.Ozmosis是基于AMI公司bios的硬件引导驱动 ...

  7. LeetCode——Climbing Stairs

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  8. T-SQL技巧收集——拆分字符串

    原文:T-SQL技巧收集--拆分字符串 在开发中,很多时候都需要处理拆分字符串的操作.下面收集了几种方法供大家分享,其中的逗号可以改为多种有需要的符号,但是不能针对多种符号同时存在的例子.有待各位补充 ...

  9. 理解Java虚拟机体系结构(转)

    1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么.正是得益于Jav ...

  10. 终结者:具体解释Nginx(一)

            相信非常多人都听过Nginx.这个小巧的东西能够和Apache及IIS相媲美. 那么它有什么作用呢?一句话.它是一个减轻Web应用server(如Tomcat)压力和实现Web应用se ...