文件上传 带进度条(多种风格)(转)

曾祥展

 

曾祥展

 

 曾祥展

曾祥展

曾祥展

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

曾祥展

 

曾祥展

 

曾祥展

 

曾祥展

 

部分代码:

 

<form id="form1" runat="server">
   <asp:ScriptManager ID="scriptManager" runat="server" EnablePageMethods="true" />
   
   <script type="text/javascript">
       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);
       }
   
   </script>
   
   <div>
       <div class="upload">
           <h3>文件上传</h3>
           <div>
               <iframe id="uploadFrame" frameborder="0" scrolling="no" src="Upload.aspx"></iframe>
               <mb:ProgressControl ID="progress" runat="server" CssClass="lightblue" style="display:none" Value="0" Mode="Manual" Speed=".4" Width="100%" />
               <div>
                   <div id="status" class="info">请选择要上传的文件</div>
                   <div class="commands">
                       <input id="upload" type="button" value="上传" /> 
                   </div>
               </div>
           </div>
       </div> 
     
   </div>
   </form>

 

 

 

 

 

 

 

 

 

 

 

 

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;
    }
}  

 

代码就不贴完了 直接打包下载吧!

有关上传的都归类在这里了:http://zengxiangzhan.cnblogs.com/category/231599.html

12
0
(请您对文章做出评价)
« 上一篇: 模拟产品展示 Flash无法展示的追踪过程

posted @ 2010-02-28 15:07 zengxiangzhan 阅读(1780) 评论(12)   编辑 收藏 网摘 所属分类: 文件操
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Spring Boot的MultipartFile类和Thymeleaf模板引擎实现文件批量上进度条显示。以下是一个简单的示例代码: 1. 在Spring Boot项目中的HTML模板中添加以下代码: ``` <form id="uploadForm" enctype="multipart/form-data" action="/upload" method="POST"> <div class="form-group"> <input type="file" name="files" multiple="multiple" onchange="this.form.submit()"> </div> </form> <div class="progress"> <div id="progressBar" class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div> </div> ``` 2. 在Spring Boot的Controller中添加以下代码: ``` @PostMapping("/upload") public String uploadFiles(@RequestParam("files") MultipartFile[] files, Model model) { int totalFiles = files.length; int uploadedFiles = 0; for (MultipartFile file : files) { // Upload the file // Increase the uploadedFiles counter by 1 // Update the progress bar in the model } return "upload-success"; } ``` 3. 在上文件的方法中,可以使用Apache Commons FileUpload和IOUtils等工具类来实现文件进度计算,例如: ``` public void uploadFile(MultipartFile file, OutputStream outputStream) throws IOException { InputStream inputStream = file.getInputStream(); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) { outputStream.write(buffer, 0, bytesRead); // Update the progress bar in the model based on the number of bytes read } inputStream.close(); outputStream.close(); } ``` 通过以上步骤,你可以使用Spring Boot实现进度条的文件批量上

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值