首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

AjaxUpload实现前台下传文件

2012-11-06 
AjaxUpload实现前台上传文件最近一直在烦恼怎么在前台实现无刷新上传文件,在网上查看了很多方法后觉得有两

AjaxUpload实现前台上传文件
最近一直在烦恼怎么在前台实现无刷新上传文件,在网上查看了很多方法后觉得有两种方法比较合意,一种是html5 javascript API,但是由于目前浏览器对html5的支持还不是很好,便放弃了。还有一种就是JQuery的控件AjaxUpload.js,但是只实现了单个文件上传,想实现多文件上传,但一直无果。如果大家有好的方法实现多文件上传,欢迎指教!
下面分享一下自己做的,希望对大家有所帮助。
Default.aspx:
首先引入js文件
    <script src="jquery-1.4.1.js" type="text/javascript"></script>
    <script src="ajaxupload.js" type="text/javascript"></script>
    <style type="text/css">
        .btnsubmit
        {
            border-bottom: #cc4f00 1px solid;
            border-left: #ff9000 1px solid;
            border-top: #ff9000 1px solid;
            border-right: #cc4f00 1px solid;
            text-align: center;
            padding: 2px 10px;
            line-height: 16px;
            background: #e36b0f;
            height: 24px;
            color: #fff;
            font-size: 12px;
            cursor: pointer;
        }//www.heatpress123.net
    </style>
    <script type="text/javascript">
        $(function() {
            var button = $('#btnUp');
            var interval;
            var uploadObj = new AjaxUpload(button, {
                action: 'AjaxuploadHandler.ashx', //要提交到的处理页面
                name: 'myfile', //提交的名字
                type:"POST",//提交方式
                onChange: function(file, ext) {//当选择文件后执行的方法,ext存在文件后续,可以在这里判断文件格式
                    if (!(ext && /^(jpg|jpeg|JPG|JPEG)$/.test(ext))) {
                        alert('图片格式不正确,请选择 jpg 格式的文件!', '系统提示');
                        return false;
                    }
                    $("#text").val(file);
                },
                autoSubmit: false, //设置不自动上传
                onSubmit: function(file, ext) {//上传文件
                    button.text('上传中');
                    this.disable();
                    interval = window.setInterval(function() {
                        var text = button.text();
                        if (text.length < 10) {
                            button.text(text + '.');
                        } else {
                            button.text('上传中');
                        }
                    }, 200);
                },
                onComplete: function(file, response) {//上传成功后。file 本地文件名称,response 服务器端传回的信息
                    button.text('上传成功');
                    window.clearInterval(interval);
                    this.enable();
                    var k = response.replace("<PRE>", "").replace("</PRE>", "").replace("<pre>", "").replace("</pre>", "");
                    if (k !=null){
                        alert("服务器端传回的串:" + k);
                        $("#txtFileName").val(k);
                    }
                }
            });
            $("#btnUpload").click(function() {
                uploadObj.submit(); //触发上传
            })
        });
    </script>


Body中:
    <form id="form1" runat="server">
    <input id="text" type="text" />
    <div id="btnUp" style="width: 300px;" class="btnsubmit">
        浏览
    </div>
    <input id="btnUpload" type="button" value="上传" />
    <input type="text" id="txtFileName" />
    </form>
AjaxuploadHandler.ashx.cs:
public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            HttpPostedFile postedFile = context.Request.Files[0];//接收文件
            string savePath = "/upload/images/";
            int filelength = postedFile.ContentLength;//文件的长度
            string fileName = postedFile.FileName;//文件名
            string ext = fileName.Substring(fileName.LastIndexOf("."));
            byte[] buffer = new byte[filelength];//创建缓存
            postedFile.InputStream.Read(buffer, 0, filelength);
            string path = UploadImage(buffer, savePath, ext);
            context.Response.Write(path);//返回文件在服务器上的路径
        }
        public static string UploadImage(byte[] imgBuffer, string uploadpath, string ext)
        {
            try
            {
                System.IO.MemoryStream m = new MemoryStream(imgBuffer);
                //如果服务器上不存在该路径,创建路径
                if (!Directory.Exists(HttpContext.Current.Server.MapPath(uploadpath)))
                {
                    Directory.CreateDirectory(HttpContext.Current.Server.MapPath(uploadpath));
                }
                string imgname = CreateIDCode() + ext;
                string _path = HttpContext.Current.Server.MapPath(uploadpath) + imgname;
                Image img = Image.FromStream(m);
                if (ext == ".jpg")
                {
                    img.Save(_path, System.Drawing.Imaging.ImageFormat.Jpeg);
                }
                else
                {
                    img.Save(_path, System.Drawing.Imaging.ImageFormat.Gif);
                }
                m.Close();
                return uploadpath + imgname;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }
        public static string CreateIDCode()
        {
            DateTime Time1 = DateTime.Now.ToUniversalTime();
            DateTime Time2 = Convert.ToDateTime("1970-01-01");
            TimeSpan span = Time1 - Time2;
            string t = span.TotalMilliseconds.ToString("0");
            return t;
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

热点排行