Перейти к содержанию
efremovxp

[Решено] Загрузки - Неправильный тип файла!

Рекомендуемые сообщения

Здравствуйте. Пытаюсь загрузить rar или zip чтобы прикрепить файл к товару, но выходит ошибка Неправильный тип файла!

В настройках стандартные типы файлов не трогал. При этом, jpg грузится без проблем.

Разрешенные расширения файлов

txt
png
jpe
jpeg
jpg
gif
bmp
ico
tiff
tif
svg
svgz
zip
rar
msi
cab
mp3
qt
mov
pdf
psd
ai
eps
ps
doc
rtf
xls
ppt
odt
ods

Разрешенные Mime типы файлов

text/plain
image/png
image/jpeg
image/jpeg
image/jpeg
image/gif
image/bmp
image/vnd.microsoft.icon
image/tiff
image/tiff
image/svg+xml
image/svg+xml
application/zip
application/x-rar-compressed
application/x-msdownload
application/vnd.ms-cab-compressed
audio/mpeg
video/quicktime
video/quicktime
application/pdf
image/vnd.adobe.photoshop
application/postscript
application/postscript
application/postscript
application/msword
application/rtf
application/vnd.ms-excel
application/vnd.ms-powerpoint
application/vnd.oasis.opendocument.text
application/vnd.oasis.opendocument.spreadsheet

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В админке, это не пройдет

Это  типы файлов для магазина.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В админке, это не пройдет

Это  типы файлов для магазина.

Делаю ИМ по продаже цфровых товаров. Где тогда необходимо прописать разрешенные типы файлов?

post-17879-0-01311900-1426247552_thumb.jpg

post-17879-0-43671400-1426247608_thumb.jpg

 

На /download/ права 777

jpg то загружается, а zip и rar ни в какую

 

upd. Попробовал mp3, даже он загружается, а архивы игнорирует. Очень странно

upd2. Никаких сторонних модулей не устанавливалось. Всё по умолчанию

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ocStore 1.5.5.1.2

Вот функция загрузки /admin/controller/catalog/download.php

    public function upload() {
        $this->language->load('sale/order');
        
        $json = array();
        
        if (!$this->user->hasPermission('modify', 'catalog/download')) {
              $json['error'] = $this->language->get('error_permission');
        }    
        
        if (!isset($json['error'])) {    
            if (!empty($this->request->files['file']['name'])) {
                $filename = basename(html_entity_decode($this->request->files['file']['name'], ENT_QUOTES, 'UTF-8'));
                
                if ((utf8_strlen($filename) < 3) || (utf8_strlen($filename) > 128)) {
                    $json['error'] = $this->language->get('error_filename');
                }          
                
                // Allowed file extension types
                $allowed = array();
                
                $filetypes = explode("\n", $this->config->get('config_file_extension_allowed'));
                
                foreach ($filetypes as $filetype) {
                    $allowed[] = trim($filetype);
                }
                
                if (!in_array(substr(strrchr($filename, '.'), 1), $allowed)) {
                    $json['error'] = $this->language->get('error_filetype');
                }    
                
                // Allowed file mime types        
                $allowed = array();
                
                $filetypes = explode("\n", $this->config->get('config_file_mime_allowed'));
                
                foreach ($filetypes as $filetype) {
                    $allowed[] = trim($filetype);
                }
                                
                if (!in_array($this->request->files['file']['type'], $allowed)) {
                    $json['error'] = $this->language->get('error_filetype');
                }
                            
                if ($this->request->files['file']['error'] != UPLOAD_ERR_OK) {
                    $json['error'] = $this->language->get('error_upload_' . $this->request->files['file']['error']);
                }
                                    
                if ($this->request->files['file']['error'] != UPLOAD_ERR_OK) {
                    $json['error'] = $this->language->get('error_upload_' . $this->request->files['file']['error']);
                }
            } else {
                $json['error'] = $this->language->get('error_upload');
            }
        }
        
        if (!isset($json['error'])) {
            if (is_uploaded_file($this->request->files['file']['tmp_name']) && file_exists($this->request->files['file']['tmp_name'])) {
                $ext = md5(mt_rand());
                
                $json['filename'] = $filename . '.' . $ext;
                $json['mask'] = $filename;
                
                move_uploaded_file($this->request->files['file']['tmp_name'], DIR_DOWNLOAD . $filename . '.' . $ext);
            }
                        
            $json['success'] = $this->language->get('text_upload');
        }    
    
        $this->response->setOutput(json_encode($json));
    }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблему решил заменив функцию upload на код, взятый из opencart 1.5.4 ))

public function upload() {
$this->language->load('sale/order');

$json = array();

if (!empty($this->request->files['file']['name'])) {
$filename = basename(html_entity_decode($this->request->files['file']['name'], ENT_QUOTES, 'UTF-8'));

if ((utf8_strlen($filename) < 3) || (utf8_strlen($filename) > 128)) {
$json['error'] = $this->language->get('error_filename');
}

if ($this->request->files['file']['error'] != UPLOAD_ERR_OK) {
$json['error'] = $this->language->get('error_upload_' . $this->request->files['file']['error']);
}
} else {
$json['error'] = $this->language->get('error_upload');
}

if (!isset($json['error'])) {
if (is_uploaded_file($this->request->files['file']['tmp_name']) && file_exists($this->request->files['file']['tmp_name'])) {
$ext = md5(mt_rand());

$json['filename'] = $filename . '.' . $ext;
$json['mask'] = $filename;

move_uploaded_file($this->request->files['file']['tmp_name'], DIR_DOWNLOAD . $filename . '.' . $ext);
}

$json['success'] = $this->language->get('text_upload');
}

$this->response->setOutput(json_encode($json));
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В код может не надо было лезть. В версии 1.5.4 уязвимость с этим http://domenam.ru/news/uyazvimost-v-opencart.html

В настройках Сервера Разрешенные Mime типы файлов:  есть запись application/zip ?

Странно конечно, почему-то движок считает что все загружаемые файлы он должен непременно уметь открывать и использовать. И на все типы файлов должны быть у него прикладные программы. 

https://ru.wikipedia.org/wiki/%D1%EF%E8%F1%EE%EA_MIME-%F2%E8%EF%EE%E2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Думаю, не всё так страшно. Я не думаю, что у популярного хостинг провайдера Timeweb есть ограничения на загрузку zip и rar файлов )) В других CMS всё без проблем грузилось

Изменено пользователем efremovxp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, аналогичная проблема возникла и с .XLS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

*.docx,*.xlsx - не загружаются.

*.doc,*.xls - грузятся

OC 2.0.1.1

 

 

UP

Добавил MIME types в Настройки,Магазин,Сервер:

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
application/vnd.openxmlformats-officedocument.wordprocessingml.document

типы брал с sitepoint.com

Изменено пользователем arshanskiyav

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здраствуйте, Zip архивы не добавляются..

Способ:

Добавил MIME types в Настройки,Магазин,Сервер:
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
application/vnd.openxmlformats-officedocument.wordprocessingml.document

Не помогло, помогите пожалуйста решить проблему..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто нибудь, плиз......

Как устранить этот баг

Изменено пользователем sweb27

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавьте

application/x-zip-compressed

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Увы, не помогло..

Кстати там есть

application/x-rar-compressed

И rar архивы не грузит тоже..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты


application/zip

application/x-zip

application/zip-compressed

application/x-zip-compressed

application/x-compressapplication/x-rar-compressed

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот у меня выглядит разрешенные Mime типы файлов:

 

text/plain
image/png
image/jpeg
image/jpeg
image/jpeg
image/gif
image/bmp
image/vnd.microsoft.icon
image/tiff
image/tiff
image/svg+xml
image/svg+xml
application/x-rar-compressed
application/x-msdownload
application/vnd.ms-cab-compressed
audio/mpeg
video/quicktime
video/quicktime
application/pdf
image/vnd.adobe.photoshop
application/postscript
application/postscript
application/postscript
application/msword
application/rtf
application/vnd.ms-excel
application/vnd.ms-powerpoint
application/vnd.oasis.opendocument.text
application/vnd.oasis.opendocument.spreadsheet
application/zip
application/x-zip
application/zip-compressed
application/x-zip-compressed
application/x-compressapplication/x-rar-compressed

И всё равно не работает!

Изменено пользователем sweb27

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну... если не проходит, то выведите причину - типа тип такого-то нет в списке

 

                if (!in_array($this->request->files['file']['type'], $allowed)) {
                    $json['error'] = $this->language->get('error_filetype') . $this->request->files['file']['type'];
                }

Изменено пользователем chukcha

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну... если не проходит, то выведите причину - типа тип такого-то нет в списке

 

                if (!in_array($this->request->files['file']['type'], $allowed)) {

                    $json['error'] = $this->language->get('error_filetype') . $this->request->files['file']['type'];

                }

Подскажите пожалуйста куда это вставлять?

Просто я не очень опытен..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так что  с этим делать то?

Проверил на локальном сервере, та же проблема.

На др. хостинге, так же..

Ставил старые движки, все работает..

 

Неужели у кого то с этой версией движка работает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так что  с этим делать то?

Проверил на локальном сервере, та же проблема.

На др. хостинге, так же..

Ставил старые движки, все работает..

 

Неужели у кого то с этой версией движка работает?

Проблему решил заменив функцию upload на код, взятый из opencart 1.5.4 ))

public function upload() {
$this->language->load('sale/order');

$json = array();

if (!empty($this->request->files['file']['name'])) {
$filename = basename(html_entity_decode($this->request->files['file']['name'], ENT_QUOTES, 'UTF-8'));

if ((utf8_strlen($filename) < 3) || (utf8_strlen($filename) > 128)) {
$json['error'] = $this->language->get('error_filename');
}

if ($this->request->files['file']['error'] != UPLOAD_ERR_OK) {
$json['error'] = $this->language->get('error_upload_' . $this->request->files['file']['error']);
}
} else {
$json['error'] = $this->language->get('error_upload');
}

if (!isset($json['error'])) {
if (is_uploaded_file($this->request->files['file']['tmp_name']) && file_exists($this->request->files['file']['tmp_name'])) {
$ext = md5(mt_rand());

$json['filename'] = $filename . '.' . $ext;
$json['mask'] = $filename;

move_uploaded_file($this->request->files['file']['tmp_name'], DIR_DOWNLOAD . $filename . '.' . $ext);
}

$json['success'] = $this->language->get('text_upload');
}

$this->response->setOutput(json_encode($json));
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Так что  с этим делать то?

Проверил на локальном сервере, та же проблема.

На др. хостинге, так же..

Ставил старые движки, все работает..

 

Неужели у кого то с этой версией движка работает?

Проблему решил заменив функцию upload на код, взятый из opencart 1.5.4 ))

public function upload() {
$this->language->load('sale/order');

$json = array();

if (!empty($this->request->files['file']['name'])) {
$filename = basename(html_entity_decode($this->request->files['file']['name'], ENT_QUOTES, 'UTF-8'));

if ((utf8_strlen($filename) < 3) || (utf8_strlen($filename) > 128)) {
$json['error'] = $this->language->get('error_filename');
}

if ($this->request->files['file']['error'] != UPLOAD_ERR_OK) {
$json['error'] = $this->language->get('error_upload_' . $this->request->files['file']['error']);
}
} else {
$json['error'] = $this->language->get('error_upload');
}

if (!isset($json['error'])) {
if (is_uploaded_file($this->request->files['file']['tmp_name']) && file_exists($this->request->files['file']['tmp_name'])) {
$ext = md5(mt_rand());

$json['filename'] = $filename . '.' . $ext;
$json['mask'] = $filename;

move_uploaded_file($this->request->files['file']['tmp_name'], DIR_DOWNLOAD . $filename . '.' . $ext);
}

$json['success'] = $this->language->get('text_upload');
}

$this->response->setOutput(json_encode($json));
}

 

 

Спасибо, подскажите пожалуйста, в каком файле менять эту функцию?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, подскажите пожалуйста, в каком файле менять эту функцию?

/admin/controller/catalog/download.php

Если не сможете разобраться, напишите в ЛС ваши данные FTP. Изменено пользователем efremovxp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

efremovxp

Вроде получилось, заработало, буду тестировать, если что, напишу..

Спасибо за помощь, очень выручил.

Изменено пользователем sweb27

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Аналогичная проблема, версия движка OpencartPro Версия 2.1.0.2.1

Только стоит ещё модуль"Файлы для скачивания ПЛЮС"

 

Некоторые zip архивы норм закачивает а некоторые ни в какую не хочет. При этом вес у них почти идентичный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

уже советовали, выведите тип файла в сообщение об ошибке

// Allowed file extension types
				$allowed = array();

				$extension_allowed = preg_replace('~\r?\n~', "\n", $this->config->get('config_file_ext_allowed'));

				$filetypes = explode("\n", $extension_allowed);

				foreach ($filetypes as $filetype) {
					$allowed[] = trim($filetype);
				}

				if (!in_array(strtolower(substr(strrchr($filename, '.'), 1)), $allowed)) {
					$json['error'] = $this->language->get('error_filetype') . strtolower(substr(strrchr($filename, '.'), 1));
				}

				// Allowed file mime types
				$allowed = array();

				$mime_allowed = preg_replace('~\r?\n~', "\n", $this->config->get('config_file_mime_allowed'));

				$filetypes = explode("\n", $mime_allowed);

				foreach ($filetypes as $filetype) {
					$allowed[] = trim($filetype);
				}

				if (!in_array($this->request->files['file']['type'], $allowed)) {
					$json['error'] = $this->language->get('error_filetype') . $this->request->files['file']['type'] ;
				}

файл /admin/controller/catalog/download.php

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.