Uploadify使用

   这几天一个项目中需要使用到上传文件,写入到数据库的操作,之前一同事自己做了一个上传功能,但对于大文件上传效率极低,并且度条显示不正确,后来让我重新做一个,起初是想自己使用AJAX做一个上传,然后在后台处理,把文件以流的方式读到内存,再从内存中写入到数据库,多文件时就会对服务器性能造成很大的影响,考虑到开发周期和项目进度就改用其它的方法,最终发现uploadify上使用方法,并且容易实现,所以改用uploadify,下面这几天使用uploadify的一些小的细节。

      

 1 <head id="Head1" runat="server">
 2     <title>Uploadify</title>
 3     <link href="JS/uploadify-v2.1.4/uploadify.css" rel="stylesheet" type="text/css" />
 4     <script src="JS/uploadify-v2.1.4/jquery-1.4.2.min.js" type="text/javascript"></script>
 5     <script type="text/javascript" src="JS/jquery.uploadify-v2.1.0/swfobject.js"></script>
 6     <script src="JS/uploadify-v2.1.4/jquery.uploadify.v2.1.4.min.js" type="text/javascript"></script>
 7     <script type="text/javascript">
 8         var vFileLimit = 5;                        
 9         $(document).ready(function () {
10             $("#uploadify").uploadify({
11                 'uploader': 'JS/uploadify-v2.1.4/uploadify.swf', //指定的swf文件
12                 'script': 'UploadHandler.ashx', //指定后台处理文件的ashx
13                 'cancelImg': 'JS/uploadify-v2.1.4/cancel.png',  //右上角取消按钮
14                 'folder': 'UploadFile',//上传到指定的目录路径
15                 'fileDesc': 'Wrod文档(*.doc,*.docx)|Excel文件(*.xls,*.xlsx)|图片文件(*.jpg;*.png;*.gif;*.bmp;*.jpeg;*.tiff;*.dwg)|压缩文件(*.zip;*.rar;*.7z)',    //提示选择哪些文件,‘|’可以把提示改为下拉列表多个选项
16                 'fileExt': '*.doc;*.docx|*.xls,*.xlsx|*.jpg;*.png;*.gif;*.bmp;*.jpeg;*.tiff;*.dwg|*.zip;*.rar;*.7z',   //与fileDesc合用,一一对应,选择不同的选项可以过滤出来不同类型文件
17                 'queueID': 'fileQueue',  //选择后文件所放位置
18                 'auto': false,  //是否自动上传
19                 'multi': true,   //是否支持多文件上传
20                 'removeCompleted': false,  //上传完成后是否自动移除,默认为true
21                 'sizeLimit': '41943041',   //上传文件大小限制单位字节
22                 'queueSizeLimit': vFileLimit,  //最多文件个数限制
23                 onInit: function () {         //启动时即调用
24                     $('#aLimit').html(vFileLimit);
25                 }, 
26                 onError: function (event, queueId, fileObj, errorObj) { //出现错误时回调此方法
27                     if (errorObj.type === 'File Size') {
28                         alert("" + fileObj.name.split('.')[0] + "》超出大小限制,请让传小于40M的文件");
29                     }
30                 },
31                 onQueueFull: function (event, queueLimit) {//队列中超出了queueSizeLimit时调用此方法
32                     alert(queueLimit);
33                     return false;  //省略此句会弹出默认的错误提示
34                 }
35                 , onFallback: function () {//未安装false时提示
36                     alert("您未安装FLASH控件,无法上传!请安装FLASH控件后再试。");
37                 },
38                 onComplete: function (event, ID, fileObj, response, data) {//单个文件上传完成后提示
39                     $('#' + ID).find('.data').html('上传完成');
40                     alert("完成");
41                 }, onAllCompleted:function(){//全部上传完成后提示
42                     alert('已全部上传完成!');
43 }
44             });
45         });
46     </script>
47 </head>
48 <body>
49     <div id="fileQueue"><!--选择文件后存放位置-->
50     </div>
51     <input type="file" name="uploadify" id="uploadify" />
52     <p>
53         <b id="aLimit"></b><a id="aid" href="javascript:$('#uploadify').uploadifyUpload()">上传</a>| <a href="javascript:$('#uploadify').uploadifyClearQueue()">
54                 取消上传</a>
55     </p>
56 </body>

后台处理:

    

 1 context.Response.ContentType = "text/plain";
 2             context.Response.Charset = "utf-8";
 3 
 4             HttpPostedFile file = context.Request.Files["Filedata"];
 5             string uploadPath =
 6                 HttpContext.Current.Server.MapPath(@context.Request["folder"]) + "\\";
 7             int _iflen = file.ContentLength;
 8             byte[] buffer = new byte[_iflen];
 9             file.InputStream.Read(buffer, 0, _iflen - 1);
10 
11             if (file != null)
12             {
13                 if (!Directory.Exists(uploadPath))
14                 {
15                     Directory.CreateDirectory(uploadPath);
16                 }
17                 file.SaveAs(uploadPath + file.FileName);
18                 //下面这句代码缺少的话,上传成功后上传队列的显示不会自动消失
19                 context.Response.Write("1");
20             }
21             else
22             {
23                 context.Response.Write("0");
24             }

其它一些参数使用,请参见官网使用方法或其他园友的参数详解,这里不再赘述

fileDesc和fileExt可再添加一个显示全部文件'*.*'

posted @ 2013-06-17 13:20  LetGo  阅读(744)  评论(0编辑  收藏  举报