Jump to content
efremovxp

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

Recommended Posts

Здравствуйте. Пытаюсь загрузить 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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

 

На /download/ права 777

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

 

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

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

Share this post


Link to post
Share on other sites

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));
    }

Share this post


Link to post
Share on other sites

Проблему решил заменив функцию 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));
}

Share this post


Link to post
Share on other sites

В код может не надо было лезть. В версии 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

Share this post


Link to post
Share on other sites

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

Edited by efremovxp

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

*.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

Edited by arshanskiyav

Share this post


Link to post
Share on other sites

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

Способ:

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

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

Share this post


Link to post
Share on other sites

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

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

Edited by sweb27

Share this post


Link to post
Share on other sites

Добавьте

application/x-zip-compressed

Share this post


Link to post
Share on other sites

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

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

application/x-rar-compressed

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

Share this post


Link to post
Share on other sites


application/zip

application/x-zip

application/zip-compressed

application/x-zip-compressed

application/x-compressapplication/x-rar-compressed

Share this post


Link to post
Share on other sites

Вот у меня выглядит разрешенные 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

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

Edited by sweb27

Share this post


Link to post
Share on other sites

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

 

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

Edited by chukcha

Share this post


Link to post
Share on other sites

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

 

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

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

                }

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

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

Проблему решил заменив функцию 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));
}

Share this post


Link to post
Share on other sites

 

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

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

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

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

 

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

Проблему решил заменив функцию 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));
}

 

 

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

Share this post


Link to post
Share on other sites

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

/admin/controller/catalog/download.php

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

Share this post


Link to post
Share on other sites

efremovxp

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

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

Edited by sweb27

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

// 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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.