2015-09-28 85 views
1

我创建了一个简单的文件上传到我的服务器使用JavaScript。 它工作,但与一些JPEG/PNG文件我收到空$_FILES$_POST变量。 我尝试了很多方法,但还没有找到解决方案。

我的HTML是这样的:

<input type="file" name="fileUpload" id="fileUpload" multiple="true" onchange="upload(this.files,0);"> 

JS功能:

upload = function(files,aid){ 
    $.each(files,function(i,file){ 
     if(file.type.match(/image.jpeg/) || file.type.match(/image.png/)){ 
      if(file.size < 10*1024*1024){ 
      var intreval = setInterval(function(){ 
        if(xhrCheck == false){ 
         xhrCheck = true; 
         var formData = new FormData(); 
         formData.append("file",file); 
         formData.append("aid",aid); 
         function success(data){console.log("success!");}; 

         setTimeout(function(){ 
          $.ajax({ 
           xhr: function() { 
            var xhr = new window.XMLHttpRequest(); 
            xhr.upload.addEventListener("progress", function(evt) { 
             if (evt.lengthComputable) { 
              var percentComplete = evt.loaded/evt.total; 
              percentComplete = parseInt(percentComplete * 100); 
              console.log(percentComplete); 
              if (percentComplete === 100) { 
               xhrCheck = false; 
               clearInterval(intreval); 
              } 

             } 
            }, false); 

            return xhr; 
           }, 
           type : "POST", 
           url : "/photo_uploader.php", 
           data : formData, 
           dataType : "JSON", 
           cache: false, 
           contentType: false, 
           processData: false, 
           success : success, 
          }) 

         },1000); 
        } 
       },1); 
      } 
      else { 
       alert("more than 10mb!"); 
      } 
     } 
     else { 
      alert("only JPEG or PNG allowed!"); 
     } 
    }); 
}; 

在PHP中我只是简单的展示$_POST$_FILES瓦尔这样的:

pinrt_r($_FILES); 
print_r($_POST); 

在正常方式,收到这样的事情:

(!不是全部)
Array 
(
    [file] => Array 
     (
      [name] => _DSC0004.jpg 
      [type] => image/jpeg 
      [tmp_name] => /tmp/phppUJNS5 
      [error] => 0 
      [size] => 5185226 
     ) 

) 
Array 
(
    [aid] => 0 
) 

但是,当我选择了一些其他的图片我收到此:

Array 
(
) 
Array 
(
) 

但如果我修改此图像(如调整大小),它通常上传到服务器。

我试图使用XMLHttpRequest 和替换Ajax请求到这一点:

var xmlRq = new XMLHttpRequest(); 
xmlRq.upload.addEventListener("progress", function(evt) { 
    if (evt.lengthComputable) { 
     var percentComplete = evt.loaded/evt.total; percentComplete = parseInt(percentComplete * 100); 
     console.log(percentComplete); 
      if (percentComplete === 100) { 
       xhrCheck = false; 
       clearInterval(intreval); 
      } 

     } 
    }, false); 

    xmlRq.onreadystatechange = function() { 
     if (this.readyState == 4) { 
      if(this.status == 200) { 
      console.log(this.response); 
      } 
      } 
    }; 
    xmlRq.open('POST', '/photo_uploader.php'); 
    console.log(formData.getAll('file')); 
    xmlRq.send(formData); 

有了这个代码,我有同样的问题。

在FireBug中,我可以看到POST数据,它总是有数据发送。

我不明白为什么有时我会收到空​​的$_FILES$_POST以及我的错误在哪里。

感谢您的时间和帮助。

+0

在正则表达式中转义元字符=>'/ image \ .jpeg /' – lshettyl

+0

@lshettyl我不完全明白你推荐给我的东西。可以解释吗? – sinkers

回答

2

尝试增加upload_max_filesize和post_max_size。 您可以从php.ini文件更改这些值。

+0

谢谢!这解决了我的问题。我完全忘了php.ini = \ – sinkers