登录
首页 >  文章 >  php教程

input:JS、PHP和Apache视频切片上传48MB以上文件解决方案

时间:2025-04-09 15:32:23 220浏览 收藏

本文提供了一种解决使用JS、PHP和Apache上传超过48MB视频文件问题的方案。该方案的核心在于采用分片上传技术,将大文件分割成小块上传,并通过调整PHP的`php.ini`文件(`upload_max_filesize`、`post_max_size`、`max_execution_time`参数)和Apache的`httpd.conf`文件(`LimitRequestBody`参数)来提升上传限制。 此外,文章还重点指出并修正了客户端JavaScript代码中FormData对象重复使用导致的错误,从而有效避免数据累积,最终实现稳定可靠的大文件视频上传。 此方案适用于需要处理大视频文件上传的项目,有效提升了系统性能和稳定性。

使用JS、PHP和Apache进行视频切片上传时,如何解决无法上传48MB以上文件的问题?

突破48MB限制:JS、PHP和Apache视频切片上传解决方案

在小型项目开发中,处理大文件上传常常会遇到挑战。本文将分享一个实际案例:使用JavaScript、PHP和Apache进行视频切片上传时,如何克服48MB文件大小限制的问题。

问题:48MB上传瓶颈

项目中采用切片上传方案,理论上支持2GB文件,每片1MB,最多2000片。然而,实际测试中,上传超过48MB(约48片)后,后续请求返回500错误。即使调整切片大小为10MB,问题依然存在。

代码分析与改进

JavaScript代码:

原代码中,FormData对象仅初始化一次,导致每次请求都携带所有已上传切片数据,最终超过Apache的fcgidmaxrequestlen限制。

改进后的JavaScript代码如下,关键在于每次发送请求前重新实例化FormData对象:

function videoFileUpload() {
    const LENGTH = 1024 * 1024; // 1MB
    let start = 0;
    let end = start + LENGTH;
    let blob_num = 1;
    let is_stop = 0;

    this.start = function () {
        const file = files.files[0];
        const blob = cutFile(file);
        sendFile(blob, file);
        blob_num++;
    }

    // ... (其余代码保持不变) ...

    function sendFile(blob, file) {
        if (is_stop === 0) {
            const xhr = new XMLHttpRequest();
            const form_data = new FormData(); // 关键:每次重新实例化FormData

            const total_blob_num = Math.ceil(file.size / LENGTH);
            form_data.append('file', blob);
            form_data.append('blob_num', blob_num);
            form_data.append('total_blob_num', total_blob_num);
            form_data.append('file_name', file.name);

            xhr.open('POST', '/upload.php', false);
            // ... (其余代码保持不变) ...
        }
    }

    // ... (其余代码保持不变) ...
}

PHP代码:

PHP代码中的文件合并逻辑也可能存在内存效率问题。对于超大文件,建议采用流式处理,避免一次性将所有切片读入内存。 (此处省略PHP代码,因为原代码未提供明显的内存泄露或效率问题,改进重点在JS端)

解决方案总结

问题的核心在于JavaScript代码中FormData对象的重复使用。通过每次请求前重新实例化FormData对象,避免了数据累积,从而解决了48MB上传限制。 对于PHP端,如果处理大文件时出现内存问题,则需要进一步优化文件合并逻辑,采用流式处理方式。 此改进方案有效解决了大文件上传问题,确保了视频切片上传的稳定性和可靠性。

以上就是《input:JS、PHP和Apache视频切片上传48MB以上文件解决方案》的详细内容,更多关于的资料请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>