【问题标题】:upload video and get the path of the video after success - 412 (Precondition Failed) - only for Chrome上传视频并获取成功后视频的路径 - 412 (Precondition Failed) - 仅适用于 Chrome
【发布时间】:2017-05-20 07:43:53
【问题描述】:

我使用 PHP(Codeigniter 3)、Apache 和 jQuery(最新)作为前端。

我有用于 ajax 的脚本将视频上传到服务器并取得进展。当请求成功时,服务器返回视频的路径,jQuery 将此路径加载到 HTML5 标准视频播放器。 一切正常,但是当通过 jQuery 将路径添加到视频播放器时,它会发出 GET 请求来获取视频,我在控制台中看到 -

获取站点的 URL/video/ojbfc1oz5h7r.mp4 412(前提条件失败)

这仅适用于谷歌浏览器。 这是上传脚本的一部分:

$.ajax({
    status:function(d){
        console.log(d);
    },
    url: URL,
    type: "POST",
    data: formdata,
    processData: false,
    contentType: false,
    async: true,
    success: function (data) {console.log(data);

        var video = $.parseJSON(data);
        console.log(video);
        console.log('///////////////////////');
        console.log(video.path);
        $('.cont').append('<video><source src="'+video.path+'" type="video/mp4"> </video>');
    },
    error:function(jqXHR, textStatus, errorThrown){
    },
    beforeSend:function(e, d){
        readVideo();
    },

    complete:function(data){
        clearInterval();
    },
    stop:function(e, r){//console.log(e);console.log(r)
    },

    xhr: function() {
        console.log(err);
        var xhr = new window.XMLHttpRequest();
        xhr.upload.addEventListener("progress", function(evt) {
            if (evt.lengthComputable) {

                var percentComplete = evt.loaded / evt.total;

                percentComplete = parseInt(percentComplete * 100);
                $('.progress').text(percentComplete + '%');
                if (percentComplete === 100) {
                }
            }
        }, false);
        return xhr;
    },
});

这是我的 PHP 的一部分:

    $this->load->library('upload');
    $this->upload->initialize($config);

    if($this->upload->do_upload('video')){

        $path = '/video/' . $this->upload->data('file_name');
        echo json_encode(array('filename' => $this->upload->data('file_name'), 'path' => $path));
     }

【问题讨论】:

  • 我也有同样的问题。我认为它带有 Chrome 更新。您找到导致它的原因/解决方案了吗?

标签: php jquery html codeigniter google-chrome


【解决方案1】:

我们遇到了一个非常相似的问题,Chrome 不会将内容下载到 HTML 视频标签中,而 Firefox 和 IE 则没有问题。

检查 HTTP 流量表明,成功加载的文件和有问题的文件之间的区别在于“ETag”标头,该标头标有“W”前缀,表示"weak" ETag

我认为这不是一个合适的解决方案,但我们最终取消了这些文件的 ETag 标头,从而解决了问题。

“适当的”修复很可能是修改我们的流程,使其仅在文件完全生成后才开始加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    相关资源
    最近更新 更多