Файл не является изображением
Я просматриваю каталог и копирую все файлы. Прямо сейчас я проверяю string.EndsWith на наличие ".jpg" или ".jpg" и т. Д. .
Есть ли более элегантный способ определить, является ли файл изображением (любым типом изображения) без хакерской проверки, как указано выше?
Проверьте файл на наличие известного заголовка . (Информация из ссылки также упоминается в этом ответе)
Первые восемь байтов файла PNG всегда содержат следующие (десятичные) значения: 137 80 78 71 13 10 26 10
Вот небольшой пример.
MimeMapping.GetMimeMapping дает следующие результаты:
- file.jpg: изображение / jpeg
- file.jpg: изображение / gif
- file.jpg: изображение / jpeg
- file.jpg: изображение / png
- file.bmp: изображение / bmp
- file.tiff: изображение / tiff
- file.svg: приложение / октет-поток
File.svg, не возвращающий тип изображения / MIME, работает в большинстве случаев, потому что вы, вероятно, не собираетесь обрабатывать векторное изображение, как скалярное изображение. При проверке типа MIME помните, что SVG действительно имеет стандартный тип MIME image / svg + xml, даже если GetMimeMapping его не возвращает.
Это будет смотреть на первые несколько байтов файла и определять, является ли это изображением.
Я внес несколько изменений в приведенное выше, чтобы вы могли добавлять свои собственные изображения, если это необходимо, а также удалил коллекции, которые не были необходимы изначально. Я также добавил перегрузку, принимающую параметр out типа string , устанавливая значение для типа изображения, из которого состоит поток.
Мы можем использовать классы изображений и графики из пространства имен System.Drawing; делать свою работу. Если код работает без ошибок, это изображение, иначе - нет. То есть пусть фреймворк DotNet сделает всю работу за нас. Код -
Если вам нужен быстрый способ проверить файл изображения до того, как он будет полностью прочитан из файла, помимо сравнения расширения файла, вы можете просто проверить его заголовок на предмет подписи файла (следующий код IsValidImageFile() проверяет BMP, GIF87a, GIF89a, PNG, TIFF, JPEG )
Проверка подписи заголовка может быть быстрой, поскольку она не загружает весь файл и не создает большие объекты, особенно при обработке нескольких файлов. Но он не проверяет, правильно ли сформированы остальные данные. Для этого можно сделать второй шаг, чтобы попытаться загрузить файл в объект Image (и таким образом быть уверенным, что файл может отображаться и обрабатываться вашей программой).
Я использую следующий метод. Он использует встроенный декодер изображений для получения списка расширений, которые система распознает как файлы изображений, а затем сравнивает эти расширения с расширением имени файла, которое вы передаете. Возвращает простое значение ИСТИНА / ЛОЖЬ.
Посмотрите, помогает ли .
РЕДАКТИРОВАТЬ: Также может помочь Image.FromFile (. ). RawFormat. Это может вызвать исключение, если файл не является изображением.
Не совсем тот ответ, который вам нужен. Но если это Интернет, то введите MIME.
Я не уверен, каков будет недостаток производительности для этого решения, но не могли бы вы выполнить некоторую функцию изображения в файле в блоке try, который не сработает и упадет в блок catch, если это не изображение?
Эта стратегия может быть не лучшим решением во всех ситуациях, но в том случае, если я сейчас работаю с ней, она имеет одно важное преимущество: вы можете использовать любую функцию, которую планируете использовать для обработки изображения (если это изображение) для тестовая функция. Таким образом, вы можете протестировать все текущие типы изображений, но он также будет распространяться на будущие типы изображений, не добавляя это новое расширение изображения в список поддерживаемых типов изображений.
Кто-нибудь видит в этой стратегии недостатки?
Это то, что я использую - это просто настройка ответа @dylmcc, чтобы сделать его немного более читаемым.
Это непростой вопрос. Если файл не является изображением, будет выдано исключение. Исходя из этого, мы можем проверить, является ли файл изображением или нет.
Покурил все темы похожие — что-то мне не удается заставить работать. Изображения в топик/страницу не загружаются ни с компа, ни с сети. Отличается только название ошибки. В галерею тоже не грузятся.
зы: На старом хосте все работало.
зыы: Проблема решилась, а понимания не добавилось.
Почему возникает такая ошибка
По каким причинам в «Ватсапе» может появляться ошибка «Выбранный файл не является фото»:
- Не тот формат файла. Мессенджер распознаёт и передаёт файлы формата jpg или jpeg. Типы файлов GIF, TIFF, PNG и RAW могут не восприниматься.
- Произошла ошибка во время подключения к интернету.
- На телефоне стоит не то время или дата.
- Возникла проблема с флешкой SD: нет свободного места, техническая неисправность карты, установлен режим «Только для чтения».
22 комментария
у меня тоже самое стало выдавать. со временем. решил таким образом: в конфиге поменял путь к папке загрузке картинок. заработало. правда пришлось перезагружать все аваторы
Вот спасибо так спасибо! Поменял у движка и галереи — все работает отлично. Интересно, а в чем причина такого поведения?
И еще. Ты пишешь «со временем», т.е. получается такая ситуация может повториться? Надо в причине разобраться. На трафике такие проблемы это будет тихий ужас. Т.к. перегружать придется не только аватары, но и все изображения в галереях.
Еще и подгружаться содержимое топика при редактировании перестало. Пусто в текстовом поле. Да уж, переезд так переезд…
У меня этаже фигня что теперь придется новую папку делать, а если вдруг вынужден буду еще раз переехать то все заново!?
Такая же ерунда на тестовом true 20, изображения в тело топика не грузятся, вылазит эта ошибка. Сколько перечитал здесь всего насчет этой ошибки так и не нашли точное решение. Кто пишет права надо на uploads и все подпапки ставить 777, ну а как их ставить если там папки сами создаются при загрузке фоток, постоянно лазить туда и менять права что ли? Еще писали что надо пути какие то указывать в конфиге… короче шляпа это все, никто толком не знает в чем причина этой ошибки.
у меня тоже, все испробовал и права устанавливал и на вдс с php.ini химичил, в конфиге все выставлено нормально, а загружаться не загружается с тех пор когда переехал на новй хостинг(
Кто нибудь докопался до истины народ? Попробуйте тоже загрузить сюда в топик картинку больше 2 mb. Может дело в интернете, но у меня вроде 2048 кбит/с…
Ну и люди))) А у меня тоже кстати такая же трабла и нашел я эту вашe тему через гугл,
проблему я решил сам, папка, в которую загружаются картинки должна быть доступна на запись тому юзеру, от которого запускается веб-сервер, я разрешил на запись
т.к. у меня сервер входит в группу-владельца папки с сайтом
Ну у меня стоит на uploads chmod -R 777 и нифига не грузит, причем как маленькие по объему и разрешению так и большие:(
В общем методом экспериментов выяснил у меня по всей видимости размер файла ни при чем, а вот разрешение влияет. Изображения с разрешением до 3000 px включительно грузятся нормально, стоит только сделать 3001 — выскакивает эта ошибка. Пробовал тупо в функции include/ajax/uploadImg.php поменять все 3000 на 5000 не помогает. Подскажите где еще посмотреть народ?
Какие будут мысли?
66 комментариев
у меня такое было с огромной фоткой, я попытался залить на другой файлохост — и он также выдал ошибку.
незнаю почему или она была некорректной или большой или и то и другое.
порой Jpeg портятся, у меня есть такие с фотика, когда есть 80% изображения, а остальыне какие-то полосочки и серые квадраты.
серые полосочки и квадратики, получается из за недокопировано файла или не докаченого или пережатого некоректно.
сами они не могут испортится
Хм, странно, а я думал если файлы долго лежат на компьютере и их никуда не копировать, то они могут испортиться, поэтому я время от времени копирую файлы из одной папки в другую.
вы сейчас прикалываетесь :)))) надо мной…
Как раз из за того что вы их переносите из одной папки в другую и портят файл, НЕ ДЕЛАЙТЕ так больше :)
Хелоу! Ну ты и приколист! Я такого еще не слышал! Ты бы еще компьютер переносил в другое место для надежности! ))
вчера какоето другое фото не загружалось, на расширение не обратил внимание
Случайно не PeterHost? Я раньше им пользовался — у них по умолчанию перекодируются файлы при загрузке. Надо добавить какую-то директиву в файл .htaccess. Уже не помню какую.
Такое предупредение выдаётся при включённом сейфмоде. Проверьте значение этого параметра, должно быть off.
У меня аналогичная проблема.
Сейфмод отключен в хацкесе
Хостеры часто ограничивают размер загружаемого файла двумя мегабайтами.
Установите в этом же файле новые квоты
php_value upload_max_filesize 5M
php_value post_max_size 10M
С помощью phpinfo (); убедитесь, что новые квоты вступили в силу.
phpinfo (); и так показывает
post_max_size 8M
upload_max_filesize 100M
Сменил, файлы все равно не грузятся.
В phpinfo стало
memory_limit 128M 64M
Какая колонка за квоту отвечает, первая или вторая?
Пхпинфо сделал. Загрузка больших картинок не пашет.
Сделал php_value memory_limit 128M, но в phpinfo:
memory_limit 128M 64M
Народ, внезапно появилась точно такая же проблема, не с того не с сего :) Так и не разобрались?
Выдает ошибку при любой загрузке любого изображения.
Файлы jpg пробовал разные, от самых маленьких до больших, пережимал сам, сервер свой, посоветуйте куда глянуть?
в логах пустота, в ассес логах
Народ, тревога отменяется, я квоту на акк поставил 50 метров :) забилось все :) из-за этого не мог обработать.
потыкался потыкался, чё тока не писал в хтассесс, все само саобой нормализовалось :)
Причина глюка не найдена, решение не найдено.
Столкнулся с этой проблемой после установки модуля Google Image Search.
Решилось установкой allow_url_fopen = On в php.ini
Решил проблему, указав правильные пути в config.php
Подобная беда. Когда гружу картинку с компа, то все гуд.
Когда указывай URL до картинки, то ошибка =( Именно такая как сдесь написано. Фаил не является изображением.
интересно почему никто не подумал попробовать выставить в .htaccess CharsetDisable On и CharsetRecodeMultipartForms Off
Peterhost например бьёт картинки изза перекодирования во время закачки… удачи.
мега респект asovetov!
Проблема решилось, путев изменения конфига последней строки
define('DIR_UPLOADS_IMAGES','/uploads/images');
на
define('DIR_UPLOADS_IMAGES','/images');
Вообще то в конфиге сейчас так:
define('DIR_UPLOADS','/uploads');
define('DIR_UPLOADS_IMAGES',DIR_UPLOADS.'/images');
Как может помочь простой перенос папки images на один уровень с папкой uploads?
Я уже все перепробовал, может действительно памяти не хватает при обработке изображений большого разрешения?
Вся проблема вот в этой строке мануала по установке
6. Дать права 777 каталогам: logs, uploads, templates\compiled, templates\cache
хотя по сути нужно поставить 777 еще и на uploads\images.
Если при выполнении этой функции возникает ошибка, то либо изображение действительно имеет неверный\не поддерживаемый формат, либо так настроен PHP, либо это ошибка PHP (что очень вряд ли). Но в любом случае, движок не может никак продолжить работу с этим изображением.
Такой ответ устроит?
Хорошо, что к причинам видны… Но какой путь решения проблемы .
Тем не менее Ошибка «Файл не является изображением»!
З.Ы. В каталоге «compiled» в момент попытки загрузить файл создаются файлы, которые в последствии не удаляются. Каталог «images» в «uploads» сам не создается. Пытался создавать «images» в ручную с правами 777 — не помогло.
Помогите люди добрые.
Нужно разобраться в причинах ошибки. Почему любой jpg файл имеющий размер 5 мб является неподдерживаемым форматом?
Ну я у себя все выставлял в php.ini, время 600 сек, upload_max_size 16M, upload_post. 24M, memory_limit -1 без ограничений, много чего менял — не помогает. Ort настройте здесь пожалуйста и помогите остальным.
Я пришел к выводу что никто, включая и разработчиков LS не знает точного и однозначного решения этой проблемы. Ответ Алексея Качаева:
Короче либо то, либо это, либо еще что то… но в любом случае движок не может никак продолжить работу с этим отображением.
Меня ответ категорически не устраивает. Пусть я баран в программировании и все такое… но и это не ответ. Вы пожалуйста сделайте на этом сайте как должно быть, чтобы можно было загружать изображения скажем до 10 mb. Я не думаю, что мы вам забьем здесь сразу все пространство. Покажите пример, вот мол картинка jpg или gif размером 6 MB и мы загрузили ее на сайт, нужно сделать то и это в настройках. А этот ответ — отписка к прочтению документации. Вы сделайте на своем сайте разработчиков, ссылки я тоже давать могу. Уж простите за тон, но так проблемы не решаются.
Присоединяюсь к yuri25. Хотя в моем случае размер не имеет значения. Как я писал: «размер загружаемого файла 25х25 точек 900 байт.» Все рекомендации выполнены — результат тот-же. Даже скажу больше, функционал LS по стандартизации картинок пока особо не нужен. Пусть картинка сохраняется как есть с примитивным ограничением по размеру файла.
Design by xeoart
Вот собственно проблема в следующем. Права на папки выставлены правильно. Кэш, темп чистил(на всякий случай). До сего момента всё работало-ни с того поломалось. Может кто сталкивался? Или автор сего творения может что то скажет?
Темы подобные прочитал все, ни чего определённого не обнаружил.
Что делать, чтобы устранить проблему
- Зайдите в «Галерею» устройства. Выберите файл, которым хотели поделиться в «Ватсапе».
- Кликните по иконке из трёх точек. В меню тапните по «Сведения».
Кликните по пункту «Сведения»
Формат файла отмечается в его названии
Если формат оказался не тот, что нужен, выполните конвертацию с помощью онлайнового сервиса-сайта, например, Covertio.
Можете загрузить с «Плей Маркета» или App Store отдельную программу для конвертации. Для «Андроида» подойдёт простая утилита «Конвертер формата изображения». Она доступна по ссылке в магазине приложений «Андроида».
Используйте «Конвертер формата изображения», чтобы изменить формат фото
Если формат оказался jpg или jpeg у фото, устраните другие причины появления ошибки:
Установите верные дату и время
В памяти должно быть свободно хотя бы 100 МБ
Если ничего не помогло, обратитесь в техподдержку «Ватсапа».
22 комментария
у меня тоже самое стало выдавать. со временем. решил таким образом: в конфиге поменял путь к папке загрузке картинок. заработало. правда пришлось перезагружать все аваторы
Вот спасибо так спасибо! Поменял у движка и галереи — все работает отлично. Интересно, а в чем причина такого поведения?
И еще. Ты пишешь «со временем», т.е. получается такая ситуация может повториться? Надо в причине разобраться. На трафике такие проблемы это будет тихий ужас. Т.к. перегружать придется не только аватары, но и все изображения в галереях.
Еще и подгружаться содержимое топика при редактировании перестало. Пусто в текстовом поле. Да уж, переезд так переезд…
У меня этаже фигня что теперь придется новую папку делать, а если вдруг вынужден буду еще раз переехать то все заново!?
Такая же ерунда на тестовом true 20, изображения в тело топика не грузятся, вылазит эта ошибка. Сколько перечитал здесь всего насчет этой ошибки так и не нашли точное решение. Кто пишет права надо на uploads и все подпапки ставить 777, ну а как их ставить если там папки сами создаются при загрузке фоток, постоянно лазить туда и менять права что ли? Еще писали что надо пути какие то указывать в конфиге… короче шляпа это все, никто толком не знает в чем причина этой ошибки.
у меня тоже, все испробовал и права устанавливал и на вдс с php.ini химичил, в конфиге все выставлено нормально, а загружаться не загружается с тех пор когда переехал на новй хостинг(
Кто нибудь докопался до истины народ? Попробуйте тоже загрузить сюда в топик картинку больше 2 mb. Может дело в интернете, но у меня вроде 2048 кбит/с…
Ну и люди))) А у меня тоже кстати такая же трабла и нашел я эту вашe тему через гугл,
проблему я решил сам, папка, в которую загружаются картинки должна быть доступна на запись тому юзеру, от которого запускается веб-сервер, я разрешил на запись
т.к. у меня сервер входит в группу-владельца папки с сайтом
Ну у меня стоит на uploads chmod -R 777 и нифига не грузит, причем как маленькие по объему и разрешению так и большие:(
В общем методом экспериментов выяснил у меня по всей видимости размер файла ни при чем, а вот разрешение влияет. Изображения с разрешением до 3000 px включительно грузятся нормально, стоит только сделать 3001 — выскакивает эта ошибка. Пробовал тупо в функции include/ajax/uploadImg.php поменять все 3000 на 5000 не помогает. Подскажите где еще посмотреть народ?
Какие будут мысли?
33 комментария
там всё хорошо) повторюсь — с такими же как и сейчас настройками всё прекрасно работало, ну просто чудеса какие то…
Все в этом мире взаимосвязано. Я не про «эти ф-ции» говорил, а вообще про действия на сайте. В этих делах чудес не бывает, раз сначала работало, а потом вдруг перестало, значит, было какое-то действие, которое к этому привело.
Здесь вариантов может быть только два:
1) ты сам что-то сделал, из-за чего перестало работать (поменял права, файл .htaccess, какие-то настройки, и т.д., и т.п.)
2) хостер что-то изменил
Третьего не дано
это понятно) я уже и пробывал все файлы движка стандартные заменить… и как люди писали что помогает — папку tmp переносил… но результат от этого не изменился. а по поводу хостера — то можно сказать я сам себе хостер)
Апач не сам по себе перекодирует, а согласно полученным инструкциям. Но, в принципе, мысль не так уж и дурна, думаю, стоит покопать в этом направлении.
Само собой ничего тут сломаться не может. Или это пост обращения к телепатам? Откуда картинки заливаете — с локального компьютера или с других сайтов? Никакой конкретики, ни описания хоста, ничего. Лог ошибок апача смотрели? Предыдущему совету следовали?
картинки пытался залить и с других сайтов, и с локального. Хост:
CentOS 5.4
PHP Version 5.2.13
allow_url_fopen On
file_uploads On
cURL support enabled
cURL Information libcurl/7.20.0 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
Лог не сказал ни чего определённого
[27-Apr-2010 12:40:29] PHP Warning: imagecreatefromjpeg() [ function.imagecreatefromjpeg ]: gd-jpeg, libjpeg: recoverable error: Corrupt JPEG data: 46 extraneous bytes before marker 0xd9
in /home/hallucin/public_html/engine/lib/external/LiveImage/Image.php on line 129
[27-Apr-2010 12:40:29] PHP Warning: imagecreatefromjpeg() [ function.imagecreatefromjpeg ]: '/home/hallucin/public_html/tmp/47ba34bf67' is not a valid JPEG file in /home/hallucin/public_html/engine/lib/external/LiveImage/Image.php on line 129
[27-Apr-2010 12:40:29] PHP Warning: imagecreatefromjpeg() [ function.imagecreatefromjpeg ]: gd-jpeg, libjpeg: recoverable error: Corrupt JPEG data: premature end of data segment
in /home/hallucin/public_html/engine/lib/external/LiveImage/Image.php on line 129
[27-Apr-2010 12:40:29] PHP Warning: imagecreatefromjpeg() [ function.imagecreatefromjpeg ]: '/home/hallucin/public_html/tmp/684e312f39' is not a valid JPEG file in /home/hallucin/public_html/engine/lib/external/LiveImage/Image.php on line 129
[27-Apr-2010 12:42:38] PHP Warning: imagecreatefromjpeg() [ function.imagecreatefromjpeg ]: gd-jpeg, libjpeg: recoverable error: Corrupt JPEG data: 46 extraneous bytes before marker 0xd9
in /home/hallucin/public_html/engine/lib/external/LiveImage/Image.php on line 129
[27-Apr-2010 12:42:38] PHP Warning: imagecreatefromjpeg() [ function.imagecreatefromjpeg ]: '/home/hallucin/public_html/tmp/b989d1d44e' is not a valid JPEG file in /home/hallucin/public_html/engine/lib/external/LiveImage/Image.php on line 129
Читайте также: