2015-09-28 70 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