CodeIgniter: "Тип файла, который вы пытаетесь загрузить, не разрешен".
Я испытываю очень странную проблему с загрузкой. Вот соответствующий файл вида:
<form action="http://localhost/index.php/temp/upload/" method="post" enctype="multipart/form-data">
<fieldset>
<input type="file" name="userfile"/>
<input type="submit" value="Upload"/>
</fieldset>
</form>
И вот мой метод temp
controller upload()
:
public function upload()
{
$config['upload_path'] = FCPATH . 'uploads' . DIRECTORY_SEPARATOR;
assert(file_exists($config['upload_path']) === TRUE);
$config['allowed_types'] = 'avi|mpg|mpeg|wmv|jpg';
$config['max_size'] = '0';
$this->load->library('upload', $config);
if ($this->upload->do_upload('userfile') === FALSE)
{
// Some error occured
var_dump($this->upload->display_errors('', ''));
var_dump($_FILES);
}
else
{
// Upload successful
var_dump($this->upload->data());
}
}
Когда я загружаю AVI-видео, все работает нормально. Когда я загружаю, скажем, WMV-видео, я получаю следующие сварочные свалки:
string 'The filetype you are attempting to upload is not allowed.' (length=57)
array
'userfile' =>
array
'name' => string 'wmv.wmv' (length=7)
'type' => string 'video/x-ms-wmv' (length=14)
'tmp_name' => string 'C:\wamp\tmp\php2333.tmp' (length=23)
'error' => int 0
'size' => int 83914
Расширение "wmv" интерпретируется как тип MIME: video/x-ms-wmv
. Это должно быть хорошо, так как моя config/mimes.php имеет следующее:
'wmv' => array('video/x-ms-wmv', 'audio/x-ms-wmv')
Это аналогичная ситуация, когда я пытаюсь загрузить другие файлы. Пока что единственный, который, похоже, работает, - это тестовое видео AVI.
Любые идеи, что может быть неправильным?
ОБНОВЛЕНИЕ 1:
Одна моя машина, загружает только AVI. На другой машине разработчика загрузка файлов отсутствует. На еще одной машине разработчика загружаются все поддерживаемые файлы. Эти проблемы с браузером или сервером?
Ответы
Ответ 1
Вы используете Firefox, не так ли?
Вы можете попробовать посмотреть system/libraries/Upload.php
строку 199:
$this->_file_mime_type($_FILES[$field]);
Измените эту строку на:
$this->_file_mime_type($_FILES[$field]); var_dump($this->file_type); die();
Затем загрузите файл .wmv
. Он будет показывать что-то вроде application/octet-stream
или что-то еще. Добавьте это к вашему mimes.php
. Надеюсь эта помощь =)
Подобный ответ здесь
Некоторые ссылки:
Ответ 2
$config [ "allowed_types" ] = "*";
Ответ 3
- Загрузите свой .wmv файл на сервер с помощью FTP/SFTP/scp/etc, где вы запускаете приложение CodeIgniter
-
На сервере, на котором вы загрузили файл .wmv, выполните следующий код PHP
<?php
$file_path = 'CHANGE_THIS_TO_ABSOLUTE_FILE_PATH_THAT_YOU_HAVE_UPLOADED.wmv';
$finfo = finfo_open(FILEINFO_MIME);
$mime = finfo_file($finfo, $file_path);
var_dump($mime);
?>
-
Сохраните код как mime.php
- Запуск в терминале - $php mime.php
- Если он выгружает любое другое значение, которое у вас уже есть для wmv, добавьте это значение в типы mm wmv.
Также проверьте PHP_VERSION на других машинах разработки. finfo_open представлен в PHP 5.3. Машина разработки, на которой работает загрузка, может иметь более старую версию PHP или может иметь правильный тип mime для wmv.
Ответ 4
Недавно у меня были некоторые очень похожие проблемы с классом загрузки Codeigniter.
* allowed_types *, похоже, не работает. Например, я хотел разрешить загрузку изображений .PNG, но это не позволяло им фильтровать. Я закончил расследование этого дальше. Я разрешил временно загружать все типы файлов, я загрузил .PNG, а затем выгрузил данные для загрузки ($ this- > upload- > data());). По какой-то причине он думал, что тип MIME был текстовым/простым! Это может быть связано с вашей проблемой.
Есть несколько решений для этого, я нашел серфинг на некоторых форумах, где вы можете изменить/расширить класс или ядро, но они не сработали для меня - извините. Я считаю, что это ошибка Codeigniter Core (я думаю, что проблема уже была открыта с помощью EllisLabs). В конце концов, я все равно жестко кодировал эту чертову вещь! Надеюсь, это поможет вам.
Основной пример/обход,
//replace with your allowed MIME types
if ($_FILES['name_of_form_upload']['type'] != 'image/jpeg' && $_FILES['name_of_form_upload']['type'] != 'image/png' && $_FILES['name_of_form_upload']['type'] != 'image/gif') {
$data['message'] = '<div class="message">That file type is not allowed!</div>';
$this->load->view('home_view', $data);
} else {
//run upload code
}
Изменить: форматирование/грамматика
Ответ 5
Вы пытались использовать mime-типы вместо расширений в $config ['allowed_types']?
напишите так:
$config["allowed_types"] = "video/x-msvideo|image/jpeg|video/mpeg|video/x-ms-wmv";
Ответ 6
На самом деле это ошибка в ядре. Я обновил до последней версии CI, и ошибка исчезла.
Ответ 7
Ответ на файл .doc для отправки в CodeIgniter
Измените это
'doc' => 'application/msword',
С этим на линии нет 95 (application/config/mimes.php
файл)
'doc' => array('application/vnd.ms-word','application/msword'),
Ответ 8
если вам нужен простой способ решить эту проблему, для него есть простое решение. открыть файл "system/libraries/Upload.php"
line no 465
you will see
if ( ! $this->is_allowed_filetype())
{
$this->set_error('upload_invalid_filetype', 'debug');
return FALSE;
}
just make it true
if ( ! $this->is_allowed_filetype())
{
$this->set_error('upload_invalid_filetype', 'debug');
return TRUE;
}
note : it will stop your all file type validation.
Ответ 9
Изменить приложение\config\Mimes.php
Ответ 10
Проверьте файл mimes.php в приложении /config. Он должен возвращать массив типов mime, например return $mimes;
в конце файла или return array(.....
в начале массива mimes.