最近要做一个文件上传的东西 经过同事的推荐所以就选择了plupload,挺强大的 由于项目框架为改动后的MVC 刚一开始破费周折 不过最后总算是完成了 废话不多说了 粘出来代码给大家参考吧!文件包大家去官网上面下载吧。下载地址http://www.plupload.com/

引用

<link rel="stylesheet" href="$webpath/library/js/plupload/css/plupload.queue.css"
        type="text/css" media="screen" />
    <script type="text/javascript" src="$webpath/library/js/plupload/jquery.min.js"></script>
    <script type="text/javascript" src="$webpath/library/js/plupload/jquery.plupload.queue.min.js"></script>
    <script type="text/javascript" src="$webpath/library/js/plupload/plupload.min.js"></script>
    <script type="text/javascript" src="$webpath/library/js/plupload/plupload.flash.min.js"></script>

前台页面的代码JS

$(function () {
            // 初始化Flash上传插件
            $("#flash_uploader").pluploadQueue({
                runtimes: 'flash',     //使用Flash插件
                url: '/AJAX/uploadFiles.ashx',     //服务器端响应页面
                max_file_size: '10mb', //最大文件限制
                chunk_size: '1mb',     //一次上传数据大小
                unique_names: true,     //是否自动生成唯一名称
                filters: [{ title: "All files", extensions: "doc,docx,ppt,pptx,xls,xlsx,vsd,pot,pps,rtf,wps,et,dps,pdf,txt,epub,rar" }
],
                // 缩放图片
                resize: { width: 320, height: 240, quality: 80 },
                // SWF文件位置
                flash_swf_url: '$webpath/library/js/plupload/plupload.flash.swf',
                init: {
                    FileUploaded: function (up, file, info) {
                        //一个文件上传成功
                        var res = $("#hid_FilePath").val();
                        var newres = "";
                        newres = res + info.response;
                        $("#hid_FilePath").val(newres);
                    },
                    Error: function (up, args) {
                        //发生错误
                        if (args.file) {
                            alert('[error] File:' + args.file);
                        } else {
                            alert('[error]' + args);
                        }
                    }
                }
            });
            // 这一块主要是防止在上传未结束前表单提交,具体大家可酌情修改编写    
            $('form').submit(function (e) {
                var uploader = $('#uploader').pluploadQueue();  // 取得上传队列   
                if (uploader.files.length > 0) {  // 就是说如果上传队列中还有文件   
                    uploader.bind('StateChanged', function () {
                        if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) {
                            $('form')[0].submit(); //表单提交
                        }
                    });
                    uploader.start();
                } else {
                    alert('队列中必须至少要有一个文件!');
                }
                return false;
            });
        });
    </script>

我用的是一般处理程序来处理上传的核心代码的uploadFiles.ashx代码

/// <summary>
        /// Json数据序列化
        /// </summary>
        /// <param name="dic"></param>
        /// <returns></returns>
        private string toJson(Dictionary<string, string> dic)
        {
            return EbookServer_Common.Public.toJson(dic);
        }
        /// <summary>
        /// Json数据反序列化
        /// </summary>
        /// <param name="jsonList"></param>
        /// <returns></returns>
        private string toJsonArray(List<string> jsonList)
        {
            return EbookServer_Common.Public.toJsonArray(jsonList);
        }
        public void UploadFile(HttpContext context)
        {
            Dictionary<string, string> _dic = new Dictionary<string, string>();
            context.Response.CacheControl = "no-cache";
            string s_rpath = FileHelper.GetUploadPath();//@"E:\My Documents\Visual Studio 2008\WebSites\SWFUpload\demos\applicationdemo.net";

string Datedir = DateTime.Now.ToString("yy-MM-dd");
            string updir = s_rpath + "\\" + Datedir;
            string returnstr = "";
            int filesize = 0;
            List<string> _arr = new List<string>();
            if (context.Request.Files.Count > 0)
            {
                try
                {

for (int j = 0; j < context.Request.Files.Count; j++)
                    {
                        Dictionary<string, string> _dic_info = new Dictionary<string, string>();
                        HttpPostedFile uploadFile = context.Request.Files[j];
                        int offset = Convert.ToInt32(context.Request["chunk"]); //当前分块
                        int total = Convert.ToInt32(context.Request["chunks"]);//总的分块数量
                        string name = context.Request["name"];
                        //文件没有分块
                        if (total == 1)
                        {

if (uploadFile.ContentLength > 0)
                            {
                                if (!Directory.Exists(updir))
                                {
                                    Directory.CreateDirectory(updir);
                                }
                                //  string fileId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + uploadFile.FileName.Substring(uploadFile.FileName.LastIndexOf("."));
                                uploadFile.SaveAs(string.Format("{0}\\{1}", updir, name));
                                filesize = Convert.ToInt32(uploadFile.ContentLength / 1024);
                            }
                        }
                        else
                        {
                            //文件 分成多块上传
                            string fullname = WriteTempFile(uploadFile, offset, name);
                            if (total - offset == 1)
                            {
                                //如果是最后一个分块文件 ,则把文件从临时文件夹中移到上传文件 夹中
                                System.IO.FileInfo fi = new System.IO.FileInfo(fullname);
                                if (!Directory.Exists(updir))
                                {
                                    Directory.CreateDirectory(updir);
                                }
                                string oldFullName = string.Format(@"{0}\\{1}", updir, name);
                                FileInfo oldFi = new FileInfo(oldFullName);
                                if (oldFi.Exists)
                                {
                                    //文件名存在则删除旧文件
                                    oldFi.Delete();
                                }
                                fi.MoveTo(oldFullName);
                                filesize = Convert.ToInt32(fi.Length / 1024);
                            }
                        }
                        
                        string filePath = string.Format(@"\\upload\\{0}\\{1}", Datedir, name);
                        string fileName = name;
                        string fileSize = filesize.ToString();
                        returnstr = returnstr + fileName + "||" + filePath + "||" + fileSize + ",";
                    }
                    context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
                    context.Response.Charset = "utf-8";
                    context.Response.AddHeader("content-type", "application/x-javascript");
                    context.Response.Write(returnstr.ToString());
                }
                catch (Exception ex)
                {
                    context.Response.Write("Message" + ex.ToString());
                }
            }
        }
        /// <summary>
        /// 保存临时文件
        /// </summary>
        /// <param name="uploadFile"></param>
        /// <param name="chunk"></param>
        /// <returns></returns>
        private string WriteTempFile(HttpPostedFile uploadFile, int chunk, string name)
        {
            // string fileId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + uploadFile.FileName.Substring(uploadFile.FileName.LastIndexOf("."));
            string tempDir = FileHelper.GetTempPath();
            if (!Directory.Exists(tempDir))
            {
                Directory.CreateDirectory(tempDir);
            }
            string fullName = string.Format("{0}\\{1}.part", tempDir, name);
            if (chunk == 0)
            {
                //如果是第一个分块,则直接保存
                uploadFile.SaveAs(fullName);
            }
            else
            {
                //如果是其他分块文件 ,则原来的分块文件,读取流,然后文件最后写入相应的字节
                FileStream fs = new FileStream(fullName, FileMode.Append);
                if (uploadFile.ContentLength > 0)
                {
                    int FileLen = uploadFile.ContentLength;
                    byte[] input = new byte[FileLen];

// Initialize the stream.
                    System.IO.Stream MyStream = uploadFile.InputStream;

// Read the file into the byte array.
                    MyStream.Read(input, 0, FileLen);

fs.Write(input, 0, FileLen);
                    fs.Close();
                }
            }
            return fullName;
        }

还有一个文件处理类 引用来的FileHelper.cs

public FileHelper()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
        }
        /// <summary>
        /// 获取上传目录
        /// </summary>
        /// <returns></returns>
        public static string GetUploadPath()
        {
            string path = HttpContext.Current.Server.MapPath("~/");
            string dirname = GetDirName();
            string uploadDir = path + "\\" + dirname;
            CreateDir(uploadDir);
            return uploadDir;
        }
        /// <summary>
        /// 获取临时目录
        /// </summary>
        /// <returns></returns>
        public static string GetTempPath()
        {
            string path = HttpContext.Current.Server.MapPath("~/");
            string dirname = GetTempDirName();
            string uploadDir = path + "\\" + dirname;
            CreateDir(uploadDir);
            return uploadDir;
        }
        private static string GetDirName()
        {
            return System.Configuration.ConfigurationManager.AppSettings["uploaddir"];
        }
        private static string GetTempDirName()
        {
            return System.Configuration.ConfigurationManager.AppSettings["tempdir"];
        }
        public static void CreateDir(string path)
        {
            if (!System.IO.Directory.Exists(path))
            {
                System.IO.Directory.CreateDirectory(path);
            }
        }

到此就完成了。。。由于时间紧迫 就不废话了 从中引用了别人的代码 希望能帮到大家 谢谢!

plupload的一些使用心得的更多相关文章

  1. plupload 异步上传插件使用心得

    plupload 可以不依赖jquery,并且提供了 html5,flash,silverlight,html4 多种上传模式,使用起来比较简单,上一篇博客中介绍了其主要参数哈函数 一.简化用法 &l ...

  2. ASP.NET 使用 plupload 上传大文件时出现“blob”文件的Bug

    最近在一个ASP.NET 项目中使用了plupload来上传文件,结果几天后客户发邮件说上传的文件不对,说是文件无法打开 在进入系统进行查看后发现上传的文件竟然没有后缀,经过一番测试发现如果文件上传的 ...

  3. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  4. NoSql数据库使用半年后在设计上面的一些心得

    NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...

  5. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  6. 我的MYSQL学习心得(三) 查看字段长度

    我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  7. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

  8. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  9. 我的MYSQL学习心得(六) 函数

    我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

随机推荐

  1. phpexcel如何读取excel的数据和如何导出数据到excel

    phpexcel如何读取excel的数据和如何导出数据到excel 一.总结 一句话总结:去官网看参考手册和api,或者找中文的博客或者参考手册 1.phpexcel插件如何下载? 其实这些插件不仅可 ...

  2. SQL索引工作原理

    SQL 当一个新表被创建之时,系统将在磁盘中分配一段以8K为单位的连续空间,当字段的值从内存写入磁盘时,就在这一既定空间随机保存,当一个8K用完的时候, SQLS指针会自动分配一个8K的空间.这里,每 ...

  3. 直方图均衡化的 C++ 实现(基于 openCV)

    这是数字图像处理课的大作业,完成于 2013/06/17,需要调用 openCV 库,完整源码和报告如下: #include <cv.h> #include <highgui.h&g ...

  4. release与debug的区别

    http://www.cnblogs.com/JemBai/archive/2009/01/13/1374805.html

  5. iis 设置 主机头,设置 host文件

    iis主机头设置后,一般本机不能再用ip:127.0.0.1访问. 接着设置host文件,使用域名直接访问主机头就可以访问到127.0.0.1 host文件路径:c//system32/drives/ ...

  6. 找到Office 2016 for MAC中AutoUpdate等组件的本地下载位置

    更新:64位delta升级文件如: $ &>/dev/null /private/var/folders/8g/7f3zrs2j3hb1jx58z1_vkykh0000gn/T/MSau ...

  7. LSM树——LSM 将B+树等结构昂贵的随机IO变的更快,而代价就是读操作要处理大量的索引文件(sstable)而不是一个,另外还是一些IO被合并操作消耗。

    Basic Compaction 为了保持LSM的读操作相对较快,维护并减少sstable文件的个数是很重要的,所以让我们更深入的看一下合并操作.这个过程有一点儿像一般垃圾回收算法. 当一定数量的ss ...

  8. SOLID

    S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写. SRP The Single Responsibility ...

  9. 33 python 并发编程之IO模型

    一 IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非 ...

  10. Tomcat_总结_01_tomcat环境搭建

    一.准备条件 1.安装jdk 二.安装tomcat 1.下载tomcat 去官网下载  64-bit Windows zip  版本的tomcat,并解压 https://tomcat.apache. ...