使用AJAX无法上传大于50kb的文件

时间:2016-12-23 07:36:40

标签: javascript jquery ajax file-upload

我不确定为什么我的代码下面的代码不能处理托管上大于50kb的任何文件,尽管我在localhost上工作正常。

我测试了很多不同的文件大小,我很确定50kb​​是它的限制。如果文件大于50kb,则永远不会传递给process.php。如果文件小于50kb,则会传递给process.php ok。

有没有人可以帮我解决这个问题。我几个小时都陷入了这个问题。

我确实将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个小时来找到问题。

这真的很受欢迎。

检查所有Javascript和PHP代码的1/4小时,记录每一步以确保代码没有任何问题。

  • 在所有方案的localhost上测试。它工作得很好。

2 /无论我设置了什么限制,更改这三个varables都没有解决问题。所以我把它们改为默认。

  • 的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

铬:

  • 档案&lt; 50kb:通过
  • 文件&gt; 50kb:通过

火狐:

  • 档案&lt; 50kb:通过
  • 文件&gt; 50kb:通过

Internet Explorer:

  • 档案&lt; 50kb:通过
  • 文件&gt; 50kb:通过

HTTPS

铬:

  • 档案&lt; 50kb:通过
  • 文件&gt; 50kb:失败

火狐:

  • 档案&lt; 50kb:通过
  • 文件&gt; 50kb:通过

Internet Explorer:

  • 档案&lt; 50kb:通过
  • 文件&gt; 50kb:通过

我不确定为什么大于50kb的文件无法通过Chrome在HTTPS协议上从test_1.php传递到test_2.php。这里有人知道原因吗?或者可以尝试在自己的服务器上测试它。

3 个答案:

答案 0 :(得分:3)

您需要为3个变量Check this tutotial

设置所需的值
  • 的upload_max_filesize
  • memory_limit的
  • 的post_max_size

答案 1 :(得分:3)

我想出了这个问题。

卡巴斯基互联网安全自动将脚本注入任何加载Chrome的网页(IE和FF不受影响)。

该脚本阻止任何大于50kb的包通过HTTPS协议发送到Web服务器。

enter image description here

  • 解决方案: 卡巴斯基互联网安全&gt;设置&gt;附加&gt;网络&gt;

    • 取消选中“将脚本注入网络流量以与网页互动”

enter image description here

答案 2 :(得分:-1)

在我的情况下,@echo off set /p math=<RAM.txt set /a calculation=%math% echo. >> RAM.txt echo %calculation% >> RAM.txt 中的upload_max_filesizememory_limitpost_max_size设置为20M以下的最小值,这可能导致ajax无法将请求发送到服务器的PHP文件。