当前位置:  编程技术>.net/c#/asp.net

(图文)asp.net 文件上传 带进度条(多种风格)

    来源: 互联网  发布时间:2014-08-30

    本文导语:  asp.net 文件上传 带进度条(多种风格) 文件上传 带进度条 多种风格 非常漂亮! 友好的提示 以及上传验证! 部分代码: var intervalID = 0; var progressBar; var fileUpload; var form; //...

asp.net 文件上传 带进度条(多种风格)

文件上传 带进度条 多种风格 非常漂亮!



友好的提示 以及上传验证!



部分代码:


   
   
   
       var intervalID = 0;
       var progressBar;
       var fileUpload;
       var form;       
       // 进度条      
       function pageLoad(){           
           $addHandler($get('upload'), 'click', onUploadClick);
           progressBar = $find('progress');
       }
       // 注册表单       
       function register(form, fileUpload){            
           this.form = form;
           this.fileUpload = fileUpload;
       }        
       //上传验证
       function onUploadClick() {        
           var vaild = fileUpload.value.length > 0;
           if(vaild){              
               $get('upload').disabled = 'disabled';             
               updateMessage('info', '初始化上传...');                
               //提交上传
               form.submit();                
               // 隐藏frame
               Sys.UI.DomElement.addCssClass($get('uploadFrame'), 'hidden');
               // 0开始显示进度条
               progressBar.set_percentage(0);
               progressBar.show();           
               // 上传过程
               intervalID = window.setInterval(function(){
                   PageMethods.GetUploadStatus(function(result){
                       if(result){
                           //  更新进度条为新值
                           progressBar.set_percentage(result.percentComplete);
                           //更新信息
                           updateMessage('info', result.message);
                           
                           if(result == 100){
                               // 自动消失
                               window.clearInterval(intervalID);
                           }
                       }
                   });
               }, 500);                
           }
           else{
               onComplete('error', '您必需选择一个文件');
           }
       }       
   
       function onComplete(type, msg){
           // 自动消失
           window.clearInterval(intervalID);
           // 显示消息
           updateMessage(type, msg);
           // 隐藏进度条
           progressBar.hide();
           progressBar.set_percentage(0);
           // 重新启用按钮
           $get('upload').disabled = '';
           //  显示frame
           Sys.UI.DomElement.removeCssClass($get('uploadFrame'), 'hidden');
       }        
       function updateMessage(type, value){
           var status = $get('status');
           status.innerHTML = value;
           // 移除样式
           status.className = '';
           Sys.UI.DomElement.addCssClass(status, type);
       }
   
      
   
文件上传
请选择要上传的文件

upload.aspx:

if (this.IsPostBack)
{
    UploadInfo uploadInfo = this.Session["UploadInfo"] as UploadInfo;
    if (uploadInfo == null)
    {
        // 让父页面知道无法处理上传
        const string js = "window.parent.onComplete('error', '无法上传文件。请刷新页面,然后再试一次);";
        ScriptManager.RegisterStartupScript(this, typeof(upload_aspx), "progress", js, true);
    }
    else
    {
        //  让服务端知道我们还没有准备好..
        uploadInfo.IsReady = false;

        //  上传验证
        if (this.fileUpload.PostedFile != null && this.fileUpload.PostedFile.ContentLength > 0

            && this.fileUpload.PostedFile.ContentLength < 1048576)//  限制1M
        {
            //  设置路径
            string path = this.Server.MapPath(@"Uploads");
            string fileName = Path.GetFileName(this.fileUpload.PostedFile.FileName);

            // 上传信息
            uploadInfo.ContentLength = this.fileUpload.PostedFile.ContentLength;
            uploadInfo.FileName = fileName;
            uploadInfo.UploadedLength = 0;

           //文件存在 初始化...
            uploadInfo.IsReady = true;

           //缓存
            int bufferSize = 1;
            byte[] buffer = new byte[bufferSize];

            // 保存字节
            using (FileStream fs = new FileStream(Path.Combine(path, fileName), FileMode.Create))
            {                         
                while (uploadInfo.UploadedLength < uploadInfo.ContentLength)
                {
                   //从输入流放进缓冲区
                    int bytes = this.fileUpload.PostedFile.InputStream.Read(buffer, 0, bufferSize);
                    // 字节写入文件流
                    fs.Write(buffer, 0, bytes);
                    //  更新大小
                    uploadInfo.UploadedLength += bytes;

                    //  线程睡眠 上传就更慢 这样就可以看到进度条了
                    System.Threading.Thread.Sleep(100);
                }
            }

            // 删除.
            File.Delete(Path.Combine(path, fileName));

            //   让父页面知道已经处理上传完毕
            const string js = "window.parent.onComplete('success', '{0} 已成功上传');";
            ScriptManager.RegisterStartupScript(this, typeof(upload_aspx), "progress", string.Format(js, fileName), true);
        }
        else
        {
            if (this.fileUpload.PostedFile.ContentLength >= 1048576)//1M
            {
                const string js = "window.parent.onComplete('error', '超出上传文件限制大小,请重新选择');";
                ScriptManager.RegisterStartupScript(this, typeof(upload_aspx), "progress", js, true);
            }
            else
            {
                const string js = "window.parent.onComplete('error', '上传文件出错');";
                ScriptManager.RegisterStartupScript(this, typeof(upload_aspx), "progress", js, true);
            }
        }                  
        uploadInfo.IsReady = false;
    }
} 

附:完整代码下载。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 怎样重装win7系统?win7重装系统步骤详细图文介绍
  • 图文混排编辑器 JexiEditor
  • iis安装配置详细图文介绍及视频教程集合
  • 哪位高手能否提供一个Java的图文混排的编辑程序。
  • Win7 64位下mysql 下载、安装与配置图文教程
  • 知不知道新浪的图文直播世界杯是怎样实现自动刷新的?
  • 最新CentOS 7中文正式版64位下载、安装及CentOS网卡IP配置(ifconfig)(图文)
  • 【图文并茂】VMware4装Fedora7,进入后遇到的问题
  • 三星携手Armani推Night Effect手机[图文]
  • CentOS 6.0安装全过程图文详解
  • access与sql server几个常用函数的区别(图文)
  • jquery 实现弹出div位于屏幕正中(图文)
  • Mysql启动与数据库的创建方法[图文]
  • android 弹出提示框的使用(图文实例)
  • 文章的动态发布(图文混排)
  • sql server 2000数据库备份还原的图文教程
  • SQLSever导入数据图文方法
  • navicat 8 创建数据库与创建用户分配权限图文方法
  • mysql 查看版本的方法图文演示
  • destoon整合UCenter图文教程
  • c# ref与out参数区别与例子(图文)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3