javascript文件阅读器上传';请求实体太大';

javascript文件阅读器上传';请求实体太大';,javascript,ajax,google-chrome,file-upload,upload,Javascript,Ajax,Google Chrome,File Upload,Upload,在Chrome中通过ajax上传文件时,我试图解决从请求中剥离文件的问题 删除或浏览文件时,我使用FileReader准备文件: // initialise fileListData array fileListData = new Array(fileList.length); // start reading files for (var i=0; i<fileList.length; i++) { // update fileLis

在Chrome中通过ajax上传文件时,我试图解决从请求中剥离文件的问题

删除或浏览文件时,我使用FileReader准备文件:

    // initialise fileListData array
    fileListData = new Array(fileList.length);

    // start reading files
    for (var i=0; i<fileList.length; i++) {

        // update fileListData file status
        fileListData[i] = { 'name': fileList[i].name, 'processing' : 1 };

        // read file
        var fileReader = new FileReader();

        fileReader.onload = (function(idx) {
            return function(e) {
                // update fileListData data
                setFilesAreReady(idx, e.target.result);
            }
        })(i);

        fileReader.readAsDataURL(fileList[i]);
    }
首先编译formData对象,然后随请求一起提交:

    // start upload
    jQuery.ajax(
    {
        data:       formData,
        url:        path_to_upload_script + '?upload_id=' + upload_id,
        type:       "POST",
        processData:    false,
        contentType:    false,
        error:
            function (jqXHR, textStatus, errorThrown)
            {
                ...
            },
        success: 
            function (response) 
            {
                ...
            }
    });

    // start ajax progress
    initialiseAjaxProgressBar(upload_id);
}
我遇到的问题是,如果上传的文件超过数兆字节,则会导致此
请求实体太大
错误:

但服务器实际上配置为接受高达250MB的文件。我使用的是Uber uploader(perl脚本),它可以处理大文件上传。ajax上传可以在firefox和InternetExplorer中处理大文件,所以这个文件阅读器只适用于chrome(和safari)

我猜发生此错误是因为内容类型错误,因为我上载的是数据字符串而不是js文件对象


如何使用我在ajax请求中附加到formData的其他参数正确上传FileReader结果(看起来像:
data:video/mp4;base64,
)。它将文件拆分为1mb块,以解决请求实体过大的问题。该文件将在服务器上重建。这也允许非常大的上传,因为每个块都不会超过PHP的post max大小。

最后,我使用了这个名为。它将文件拆分为1mb块,以解决请求实体过大的问题。该文件将在服务器上重建。这也允许非常大的上传量,因为每个数据块都不会超过PHP的post最大大小。

相关吗?@raina77ow不,我不这么认为?因为我在ajax请求中已经有processData:false。另外,我需要发送更多与文件相关的参数?@raina77ow不,我不这么认为?因为我在ajax请求中已经有processData:false。另外,我需要随文件发送更多参数
    // start upload
    jQuery.ajax(
    {
        data:       formData,
        url:        path_to_upload_script + '?upload_id=' + upload_id,
        type:       "POST",
        processData:    false,
        contentType:    false,
        error:
            function (jqXHR, textStatus, errorThrown)
            {
                ...
            },
        success: 
            function (response) 
            {
                ...
            }
    });

    // start ajax progress
    initialiseAjaxProgressBar(upload_id);
}