1

我想以 .mov 文件扩展名上传视频文件,其他视频文件(如 mp4、flv 可以正常工作,但是当想上传 .mov 时它不起作用。

这是我的代码:

public function add_video(){
    if (isset($_FILES['video']['name']) && $_FILES['video']['name'] != '') {
        unset($config);
        $date = date("ymd");
        $configVideo['upload_path'] = './video';
        $configVideo['max_size'] = '9000000000';
        $configVideo['allowed_types'] = 'mov|avi|flv|wmv|mp3|mp4';
        $configVideo['overwrite'] = FALSE;
        $configVideo['remove_spaces'] = TRUE;
        $video_name = $date.$_FILES['video']['name'];
        $configVideo['file_name'] = $video_name;

        $this->load->library('upload', $configVideo);
        $this->upload->initialize($configVideo);
        if(!$this->upload->do_upload('video')) {
            echo $this->upload->display_errors();
        }else{
            $videoDetails = $this->upload->data();
            $data['video_name']= $configVideo['file_name'];
            $data['video_detail'] = $videoDetails;
            $this->load->view('/upload_video/show', $data);
        }

    }else{
        echo "Please select a file";
    }
  }

上传 .mov 视频后我收到的错误消息
是不允许您尝试上传的文件类型。 是的,使用 * 登录允许类型修复问题,但这将允许用户上传所有扩展文件。

注意:我正在使用 Codeigniter 3.0.4

4

2 回答 2

4

文件上传类使用中的配置将文件扩展名从allowed_types解析为实际的 MIME 类型application/config/mimes.php

我认为正在发生的是您的.mov文件具有与video/quicktime不同的 MIME 类型。你可以在这里查看默认配置mimes.php

您需要做的是检查文件的确切 MIME 类型并将其添加到 mimes.php 中

您可以使用mime_content_type来做到这一点。

echo mime_content_type('filename.mov');

然后只需在application/config/mimes.php中更改以下行

'mov'   =>  'video/quicktime',

通过添加一种或多种不同的 MIME 类型。我可以通过添加 video/x-quicktime 来解决同样的问题

'mov'   =>  array('video/quicktime', 'video/x-quicktime'),

此源Fileext.com之后的一些可能的 MIME 类型包括:video/quicktime、video/x-quicktime、image/mov、audio/aiff、audio/x-midi、audio/x-wav、video/avi

于 2016-03-12T14:56:39.690 回答
1

CodeIgniter 检查文件内容以确保它实际上是预期的 MIME 类型。

首先,使用以下代码验证是否为您的文件检测到正确的 MIME:

// should be "video/quicktime"
$mime = finfo_file(finfo_open(FILEINFO_MIME_TYPE), $filepath);

我假设您至少使用 PHP 5.3。由于您可以上传其他文件类型,我假设上面的代码可以正常工作而不会产生错误,否则您必须修复 MIME 检测(例如 Apache“魔术文件”)。

所以,通常唯一的 MIME.movvideo/quicktime,但如果你有其他东西,例如video/hdmov,你可以将它添加到application/config/mimes.php

// replace:
'mov' => 'video/quicktime',
// with:
'mov' => array('video/quicktime', 'video/hdmov'),

如果结果为空,说明您的文件未被识别(或以某种方式损坏),请尝试使用其他.mov文件以查看它们是否有效。

有关Upload::_file_mime_type()CodeIgniter 如何尝试检测文件 MIME 的详细信息,请参阅。

于 2016-03-12T14:46:38.630 回答