2016-12-23 79 views
5

我不確定爲什麼我的代碼在我的主機上無法處理大於50kb的任何文件,儘管我在本地主機上工作正常。無法使用AJAX上傳大於50kb的文件

我測試了很多不同的文件大小,我非常肯定50kb​​是它的極限。如果一個文件大於50kb,它永遠不會傳遞給process.php。如果一個文件小於50kb,它會被傳遞給process.php。

有沒有人可以幫助我解決這個問題。我一直被困在這個問題上好幾個小時。

我確實在php.ini中設置了upload_max_filesize到5M。

$(document).ready(function() { 
    $('#img_uploader').on('change', function() 
    { 
     uploadFiles(this.files); 
    } 
}); 

function uploadFiles(fileList) 
{ 
    var xhr = new XMLHttpRequest(); 
    var formData = new FormData(); 

    for (var i = 0; i < fileList.length; i++) { 
     var file = fileList[i]; 
     if (!file.type.match('image.*')) { 
      continue; 
     } 
     formData.append('photos[]', file); 
     formData.append('request', "uploadImg"); 
    } 

    xhr.open('POST', 'process.php', true); 
    xhr.onload = function() { 
     if (xhr.status === 200) { 
      var data = xhr.responseText; 
      console.log(data); 
      //convert_json_append_HTML(data); 
     } else { 
      alert('An error occurred!'); 
     } 
    }; 
    xhr.send(formData); 
} 

更新時間:測試結果

我已經花了6個小時才找到問題。

這真是weired。

四分之一小時,審查所有的JavaScript和PHP代碼,記錄每一個步驟,以確保沒有錯的代碼。

  • 測試本地主機上的所有場景。它工作完美。

2 /更改這三個變量不會解決問題,無論我設置了什麼限制。所以我改變了他們違約。

  • 的upload_max_filesize
  • memory_limit的
  • 的post_max_size

3 /瀏覽器測試:

創建2個文件:test_1.php和test_2.php。 (基本HTML,沒有使用Javascript參與)

test_1.php

<form action="test2.php" method="post" enctype="multipart/form-data"> 
    Select image to upload: 
    <input type="file" name="fileToUpload" id="fileToUpload"> 
    <input type="submit" value="Upload Image" name="submit"> 
</form> 

test_2。PHP

<?php 
var_dump($_FILES); 

HTTP

鉻:

  • 文件< 50KB:通過
  • 文件> 50KB:通過

火狐:

  • 文件< 50KB:通過
  • 文件> 50KB:通過

Internet Explorer中:

  • 文件< 50KB:通過
  • 文件> 50KB:通過

HTTPS

鉻:

  • 文件< 50KB:通過
  • 文件> 50KB:失敗

火狐:

  • 文件< 50KB:通過
  • 文件> 50KB:通過

Internet Explorer中:

  • 文件< 50KB:通過
  • 文件> 50KB:通過

我不知道爲什麼文件使用Chrome瀏覽器的HTTPS協議不能從test_1.php傳遞給test_2.php。有沒有人知道原因?或者可以嘗試在自己的服務器上進行測試。

+0

檢查了Web服務器的錯誤日誌文件? – Spacedman

+0

你得到的任何錯誤?您可以檢查瀏覽器控制檯,服務器的訪問日誌。 –

+0

有3個變量需要檢查,upload_max_filesize,memory_limit和post_max_size。對於文件上傳,所有3個都進入了圖片。 – GeekAb

回答

1

我想通了這個問題設定的期望值。

卡巴斯基互聯網安全套將腳本自動注入任何加載了Chrome瀏覽器的網頁(IE和FF不受影響)。

腳本會阻止任何大於50kb的包以HTTPS協議發送到Web服務器。

enter image description here

  • 解決方案: 卡巴斯基互聯網安全套裝>設置>其它>網絡>

    • 取消選擇 「插入腳本到網絡流量與網頁互動」

enter image description here

+0

你救了我免於自殺!我在過去的36個小時裏解決了這個問題。非常感謝Man!只有一個更正FF也受此影響..我不知道EDGE –

3

您需要爲3個變量Check this tutotial

  • 的upload_max_filesize
  • memory_limit的
  • 的post_max_size
+0

這三個變量不是我的問題的原因。問題依然存在,無論限制有多大。請參閱我的更新說明。 –

+0

你檢查了服務器日誌HTTPS Chrome: 文件> 50kb – GeekAb

+0

是的,我做到了。沒有記錄錯誤。 –