繁体   English   中英

javascript FileReader上传“请求实体太大”

[英]javascript FileReader upload 'Request Entity Too Large'

我正在尝试解决在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]);
    }

方法setFilesAreReady只是将FileReader结果存储到fileListData数组中,然后检查数组中的所有项目是否都已完成处理(以便可以启用上载按钮)。

文件读取完成后,将启用上载按钮,然后单击上载开始发出Ajax请求:

if (is_chrome || is_safari) {
    formData.append('upfile_0', ajax_uploads[file_idx].fileData);
    console.log(ajax_uploads[file_idx].fileData);
} else {
    formData.append('upfile_0', file);
}
formData.append('event', eventVal);
formData.append('filePrivacy', filePrivacyVal);

首先,我编译一个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);
}

我的问题是,如果上传的文件超过几兆字节,则会出现此Request Entity Too Large错误:

请求的实体太大

但是服务器实际上已配置为接受最大250MB的文件。 我正在使用Uber上传器(perl脚本),它可以处理大文件上传。 Ajax上传适用于firefox和Internet Explorer中的大文件,因此FileReader的解决方法仅适用于chrome(和safari)。

我猜测发生此错误是因为内容类型错误,因为我正在上传数据字符串而不是js File对象。

我如何正确上传FileReader结果(看起来像: data:video/mp4;base64,... )以及我在ajax请求中附加到formData的其他参数?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM