【问题标题】:Unable to send base64 video through Ajax Post to PHP无法通过 Ajax Post 将 base64 视频发送到 PHP
【发布时间】:2015-07-07 17:37:50
【问题描述】:

当我尝试上传 16.9 MB 大小的 MP4 视频时,使用 ajax 异步发布到 PHP 文件时,控制台会触发错误提示:POST http://website.com/proc_vids.php net::ERR_EMPTY_RESPONSE

我知道这个问题与 PHP memory_limit 有关,因为当我设置为 200 MB 时一切正常,但当我将其更改回 100 MB 时,就会发生此错误。

我什至无法将 POST 发送到 PHP 变量,因为一旦进行了 ajax post 调用,它就会触发错误,甚至无需在服务器端 (PHP) 执行任何操作。这是ajax的邮政编码:

var proc = 1;
video = document.getElementById('preview_video').src;
    $.ajax({
        'async': true,
        'type': "POST",
        'global': false,
        'dataType': 'json',
        'url': "proc_vids.php",
        'data': {proc: proc, video: video}
    }).done(function () {
            //Do something
            });

PHP 代码:

$proc = $_POST['proc'];

if ($proc == 1){

//$video = $_POST['video'];
}

如您所见,我注释了将 POST 传递给变量的行,但仍会触发错误。

我可以对包含 base64 代码的视频变量做些什么来不扩展消耗如此高的内存级别? 有没有不设置 memory_limit 更高的替代方案?

【问题讨论】:

  • 请发布您的proc_vids.php 代码
  • 用 PHP 代码更新。
  • 你试过增加post_max_size吗?
  • 怎么可能是 post_max_size 问题?如果我将 memory_limit 设置为 200 MB,则不会发生此问题,但我无法在共享主机提供商上使用超过 100 MB。
  • 16.9MB

标签: javascript php jquery ajax video


【解决方案1】:

感谢 cmorrissey,问题解决了!

我使用了与此线程中描述的相同的方法:Convert HTML5 Canvas into File to be uploaded?

将 AJAX POST 作为 FormData 发送并将 base64 数据转换为 Uint8Array 为 blob 是在进行 POST 时不分配 PHP 内存的关键。但要小心,因为旧版浏览器可能不支持 blob。

谢谢你们;)

【讨论】:

    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2016-04-18
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多