
突破48MB限制:JS、PHP和Apache视频切片上传解决方案
在小型项目开发中,处理大文件上传常常会遇到挑战。本文将分享一个实际案例:使用JavaScript、PHP和Apache进行视频切片上传时,如何克服48MB文件大小限制的问题。
问题:48MB上传瓶颈
项目中采用切片上传方案,理论上支持2GB文件,每片1MB,最多2000片。然而,实际测试中,上传超过48MB(约48片)后,后续请求返回500错误。即使调整切片大小为10MB,问题依然存在。
代码分析与改进
JavaScript代码:
原代码中,FormData对象仅初始化一次,导致每次请求都携带所有已上传切片数据,最终超过Apache的fcgidmaxrequestlen限制。
立即学习“PHP免费学习笔记(深入)”;
改进后的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端,如果处理大文件时出现内存问题,则需要进一步优化文件合并逻辑,采用流式处理方式。 此改进方案有效解决了大文件上传问题,确保了视频切片上传的稳定性和可靠性。
以上就是使用JS、PHP和Apache进行视频切片上传时,如何解决无法上传48MB以上文件的问题?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1256561.html
微信扫一扫
支付宝扫一扫