You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移动网络下多图片上传不同选择方式耗时差异过大求助

多图片上传功能在移动网络下的异常耗时问题

我正在开发多图片上传功能,当前逻辑为选择图片时显示所有图片预览,再提交全部数据。

HTML代码

<input type="file" id="newimage" name="newimage" multiple="" accept=".jpg,.jpeg,.png" class="inputfile" onchange="readURLNEW(this,'5');">

JS代码

function readURLNEW(input,cnt) {
             
             if (input.files) {
                  
                 var dispimgcnt = $('.singleImageCanvasContainer').length;
                  
                 var filesAmount = input.files.length;
                 var total = filesAmount + dispimgcnt;
                   var imagesLoaded = 0;
                  if(total <= cnt)
                  {
                     $('.preloader').show();       
                    for (i = 0; i < filesAmount; i++) {
                         
                         var j = 1; 
                     var reader = new FileReader();
                     reader.onload =  function (e) {      
                        var image = new Image();  
                        image.onload =  function (imageEvent) {   
                            var canvas = document.createElement('canvas'),  
                                max_size = 500,// TODO : max size for a pic  
                                width = image.width,  
                                height = image.height;  
                            if (width > height) {  
                                if (width > max_size) {  
                                    height *= max_size / width;  
                                    width = max_size;  
                                }  
                            } else {  
                                if (height > max_size) {  
                                    width *= max_size / height;  
                                    height = max_size;  
                                }  
                            }  
                            canvas.width = width;  
                            canvas.height = height;  
                            canvas.getContext('2d').drawImage(image, 0, 0, width, height);  

                            var dataUrl = canvas.toDataURL('image/jpeg');  

                   var blob = dataURLToBlob(dataUrl);        
                          
                        var icnt = dispimgcnt > 0 ? (dispimgcnt + j) : j;
                          var data = new FormData();
                           
                          data.append('file', blob);
                          
                        $.ajax({
                            url :  "tempsave.php",
                            type: 'POST',
                            data: data,
                            async:false, 
                            contentType: false,
                            processData: false,
                            success: function(data) {  
                                                          if($('.singleImageCanvasContainer').length <= 0)
                                    display = 'block';         
                                
                             var div = $("<div class='singleImageCanvasContainer pimage' id='singleImageCanvasContainer"+(icnt)+"' style='display: inline-block;position: relative;margin-right:5px;margin-top: 10px;' > <button type='button' class='singleImageCanvasCloseBtn' style='position:absolute;background:#61f573;border:none;font-size:1.2em;border-radius:50%;-webkit-appearance: none;padding: 2px 8px 2px 8px;left: 78%;'>"
                              +"<i class='fa fa-bars'></i>"
                            +"<div class='dropdown-content' style='display:none'><a href='#' class='main_pic' style='display:'>Set as main picture</a><a href='#' class='crop_pic'>Crop</a><a href='#' class='delete_pic'>Delete</a></div>"
                           +"</button><button type='button' class='singleImageCanvasMainBtn' style='display:"+display+";position:absolute;background:#61f573;border:none;font-size:1.2em;border-radius:50%;-webkit-appearance: none;padding: 2px 8px 2px 8px;display: '><i class='fa fa-check'></i></button>"
                            +"<img style='border-radius:20px; height: 150px;width: 150px;border:1px solid lightgray' src='"+data+"' class='file-img img-loading'></div>"
                           );
                           
                             $('div.imgcontainer').append(div); 
                               imagesLoaded++;

                                if(imagesLoaded == filesAmount){
                                    allLoaded();
                                }
                              
                            },
                            error: function() {
                                 $('.preloader').hide();
                              alert("Failed!");
                            }
                          });
                          j++;
                           }
                             
                            image.src = e.target.result; 
                    
                         };
                         reader.readAsDataURL(input.files[i]);

                        }
                    
                     }
                                             
                 }
              
     }

移动网络下的异常耗时表现

  • 同时选择5张5MB图片,服务器上传耗时94秒;
  • 先选择4张5MB图片,再单独选择1张5MB图片,服务器上传耗时37秒;
  • 每次选择1张5MB图片,共选择5次,服务器上传耗时16秒。

我的PHP代码仅为基础的图片保存与数据库存储逻辑,应该没有问题,怀疑JS代码存在问题。我使用了reader.onload、image.onload和ajax调用,是否是这些环节出现了问题?恳请帮忙排查!

内容的提问来源于stack exchange,提问作者ayyanar pms

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 07:00:20