JQuery实现多文件上传

 由于考试系统的需求 , 需要将 听力文件或是图片 上传到服务器中的数据库中 , 而文件又是很多 . 若是一个一个的上传 , 是很费事的 . 为了避免时间和精力的浪费 , 人性化 . 实现了多文件上传 .
Uploadify JQuery 的一个上传插件,实现的效果非常不错,带进度显示 .
 
官方下载
官方文档
 
下面讲解

1如何实现上传多文件.
2是解决如何实现大文件上传

 

首先创建解决方案 , 添加 jquery ls 和一些资源文件 ( 如图片和进度条显示等 )
  jquery-1.3.2.min.js
 jquery.uploadify.v2.1.0.js
  jquery.uploadify.v2.1.0.min.js
  swfobject.js
  uploadify.css

1 页面的基本代码如下

我这里用的是 aspx 页面 (html 也是也可的 )

页面中引入的jsjs函数如下


  1. <script src="js/jquery-1.3.2.min.js" type="text/javascript"></script>  
  2. <script src="js/jquery.uploadify.v2.1.0.js" type="text/javascript"></script>  
  3. <script src="js/jquery.uploadify.v2.1.0.min.js" type="text/javascript"></script>  
  4. <script src="js/swfobject.js" type="text/javascript"></script>  
  5. <link href="css/uploadify.css" rel="stylesheet" type="text/css" />  
  6.   
  7. </script>  

js函数

  1. <script type="text/javascript">  
  2.         $(document).ready(function () {  
  3.    
  4.             $("#uploadify").uploadify({  
  5.                 'uploader''image/uploadify.swf',  //uploadify.swf文件的相对路径,该swf文件是一个带有文字BROWSE的按钮,点击后淡出打开文件对话框                
  6.              'script''Handler1.ashx',//    script :  后台处理程序的相对路径  
  7.                 'cancelImg''image/cancel.png',  
  8.                 'buttenText''请选择文件',//浏览按钮的文本,默认值:BROWSE。  
  9.                 'sizeLimit':999999999,//文件大小显示  
  10.                 'floder''Uploader',//上传文件存放的目录  
  11.               'queueID''fileQueue',//文件队列的ID,该ID与存放文件队列的div的ID一致  
  12.                 'queueSizeLimit': 120,//上传文件个数限制  
  13.                 'progressData''speed',//上传速度显示  
  14.                 'auto'false,//是否自动上传  
  15.                 'multi'true,//是否多文件上传  
  16.                 //'onSelect': function (e, queueId, fileObj) {  
  17.                 //    alert("唯一标识:" + queueId + "\r\n" +  
  18.                 //  "文件名:" + fileObj.name + "\r\n" +  
  19.                 //  "文件大小:" + fileObj.size + "\r\n" +  
  20.                 //  "创建时间:" + fileObj.creationDate + "\r\n" +  
  21.                 //  "最后修改时间:" + fileObj.modificationDate + "\r\n" +  
  22.                 //  "文件类型:" + fileObj.type);  
  23.    
  24.                 //    }  
  25.                 'onQueueComplete'function (queueData) {  
  26.                     alert("文件上传成功!");                    
  27.                     return;  
  28.                 }  
  29.    
  30.             });  
  31.         });  

 

页面中的控件代码

 
  1. <body>  
  2.     <form id="form1" runat="server">  
  3.     <div id="fileQueue">         
  4.     </div>  
  5.         <div>  
  6.             <p>  
  7.                 <input type="file" name="uploadify" id="uploadify"/>  
  8.                 <input id="Button1" type="button" value="上传" onclick="javascript: $('#uploadify').uploadifyUpload()" />  
  9.                 <input id="Button2" type="button" value="取消" onclick="javascript:$('#uploadify').uploadifyClearQueue()" />  
  10.             </p>  
  11.         </div>  
  12.     </form>  
  13. </body>  

函数主要参数

示例:
  1. $(document).ready(function() {  
  2.         $('#fileInput1').fileUpload({  
  3.                 'uploader''uploader.swf',//不多讲了  
  4.                 'script''/AjaxByJQuery/file.do',//处理Action  
  5.                 'cancelImg''cancel.png',          
  6.                 'folder''',//服务端默认保存路径  
  7.                 'scriptData':{'methed':'uploadFile','arg1','value1'},  
  8.                 //向后台传递参数,methed,arg1为参数名,uploadFile,value1为对应的参数值,服务端通过request["arg1"]  
  9.                 'buttonText':'UpLoadFile',//按钮显示文字,不支持中文,解决方案见下  
  10.                 //'buttonImg':'图片路径',//通过设置背景图片解决中文问题,就是把背景图做成按钮的样子  
  11.                 'multi':'true',//多文件上传开关  
  12.                  'fileExt':'*.xls;*.csv',//文件过滤器  
  13.                 'fileDesc':'.xls',//文件过滤器 详解见文档  
  14.            'onComplete' : function(event,queueID,file,serverData,data){   
  15.                         //serverData为服务器端返回的字符串值  
  16.                         alert(serverData);  
  17.                  }  
  18.         });  
  19. });  
 
后台一般处理文件
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.IO;  
  5. using System.Net;  
  6. using System.Web;  
  7. using System.Web.Services;  
  8. namespace fupload  
  9. {  
  10.     /// <summary>  
  11.     /// Handler1 的摘要说明  
  12.     /// </summary>  
  13.     public class Handler1 : IHttpHandler  
  14.     {  
  15.    
  16.         public void ProcessRequest(HttpContext context)  
  17.         {  
  18.             context.Response.ContentType = "text/plain";  
  19.    
  20.             HttpPostedFile file = context.Request.Files["Filedata"];//对客户端文件的访问  
  21.    
  22.             string uploadPath = HttpContext.Current.Server.MapPath(@context.Request["folder"])+"\\";//服务器端文件保存路径  
  23.    
  24.             if (file != null)  
  25.             {  
  26.                 if (!Directory.Exists(uploadPath))  
  27.                 {  
  28.                     Directory.CreateDirectory(uploadPath);//创建服务端文件夹  
  29.                 }  
  30.    
  31.                 file.SaveAs(uploadPath + file.FileName);//保存文件  
  32.                 context.Response.Write("上传成功");  
  33.             }  
  34.    
  35.             else  
  36.             {  
  37.                 context.Response.Write("0");  
  38.             }  
  39.    
  40.         }  
  41.    
  42.         public bool IsReusable  
  43.         {  
  44.             get  
  45.             {  
  46.                 return false;  
  47.             }  
  48.         }  
  49.     }  
  50. }  

 
以上方式基本可以实现多文件的上传,大文件大小是在控制在 10M 以下 / 。基本页面如下
 

 

2解决大文件上传


  当文件大于 10M 的时候上传会报错, 1 是超过文件长度。
方案 1 在配置文件中设置响应时间。
 
  1. <span style="font-size:18px;"><system.web>  
  2.       <compilation debug="true" targetFramework="4.0" />  
  3.     <httpRuntime maxRequestLength="20480000" executionTimeout ="7200"/>  
  4.     </system.web></span>  

这个方式基本可以解决 10M 以上的。当初自认为可以解决大文件的。但是发现并不是这样。当文件大于 30M 又出现了 HttpError IO 的错误。


经过几番的周折。在师傅和师姐的帮助下终于找打了解决的方案。还是在配置文件中设置,但是这次设置的是文件的大小限制。以为前台设置好文件的大小,就不用在配置文件中设置,但是事实并不是这样的。还是得需要配置。

添加如下配置

  1. <span style="font-size:18px;"><system.webServer>  
  2.     <security>  
  3.     <requestFiltering>  
  4.       <requestLimits maxAllowedContentLength="999999999"></requestLimits>  
  5.     </requestFiltering>       
  6.     </security>  
  7.   </system.webServer></span>  

成功提示如下


经过测试 100M 以上的文件也是没问题的。

以上代码只是一个很小的实例代码,当然文件当然不能保存到服务端的目录下了。需要上传到专门的非结构化数据库中(如 Mongodb ),Mongodb数据库详细了解请看上篇博客。    实例代码下载
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值