Yii — php-фреймворк → Yii 1.1.8 — загрузка файлов с произвольным расширением с помощью CMultiFileUpload
Доброго всем времени суток!
Недавно делая сайт на Yii обнаружили такую вот дыру в загрузке файлов на сервер с помощью CMultiFileUpload (за что отдельное спасибо Mx21): есть возможность взять файл с произвольным расширением, дописать в конец имени что-то вроде .jpg и потом залить на сервер виджетом CMultiFileUpload. Даже не смотря на то, что свойство 'accept' имеет, к примеру, значения 'jpeg|jpg|gif|png', т.е. не должно аплоадить ничего кроме такого рода картинок, происходило следующее: файл без проблем закачивался на сервер, причем .jpg в конечном файле обрезалось и на сервере оказывался исходный файл с тем расширением какое оно было до того как мы его переименовали.
Используемая нами версия фреймворка 1.1.8.
Лечится следующим образом:
В файле /framework/web/js/jquery.multifile.js нужно исправить строки 222-223:
вернее заменить их на следующий код:
Т.е. добавили проверку на количество точек в имени загружаемого файла, если более одной точки получаем сообщение об ошибке «Invalid file type».
Недавно делая сайт на Yii обнаружили такую вот дыру в загрузке файлов на сервер с помощью CMultiFileUpload (за что отдельное спасибо Mx21): есть возможность взять файл с произвольным расширением, дописать в конец имени что-то вроде .jpg и потом залить на сервер виджетом CMultiFileUpload. Даже не смотря на то, что свойство 'accept' имеет, к примеру, значения 'jpeg|jpg|gif|png', т.е. не должно аплоадить ничего кроме такого рода картинок, происходило следующее: файл без проблем закачивался на сервер, причем .jpg в конечном файле обрезалось и на сервере оказывался исходный файл с тем расширением какое оно было до того как мы его переименовали.
Используемая нами версия фреймворка 1.1.8.
Лечится следующим образом:
В файле /framework/web/js/jquery.multifile.js нужно исправить строки 222-223:
if(MultiFile.accept && v && !v.match(MultiFile.rxAccept))//{
ERROR = MultiFile.STRING.denied.replace('$ext', String(v.match(/\.\w{1,4}$/gi)));
вернее заменить их на следующий код:
var str=this.value;
var pattern='\.';
var pos = str.indexOf(pattern);
for (var count = 0; pos != -1; count++)
pos = str.indexOf(pattern, pos + pattern.length);
if((MultiFile.accept && v && !v.match(MultiFile.rxAccept)) || count>1)//{
ERROR = MultiFile.STRING.denied.replace('$ext', String(v.match(/\.\w{1,4}$/gi)));
Т.е. добавили проверку на количество точек в имени загружаемого файла, если более одной точки получаем сообщение об ошибке «Invalid file type».
Django Framework → YTupload ver. 0.1 (Конвертируем и загружаем на YouTube)
Доброго времени суток!
Продолжаю тему «Конвертируем и загружаем на YouTube». Благодаря ценным комментариям хабралюдей, проект YTupload не был заброшен и забыт, а выложен на GitHub и усовершенствован.
YTupload — проект, задача которого, конвертировать и загружать ролики на Ваш аккаунт в youtube. Написан на django.
Продолжаю тему «Конвертируем и загружаем на YouTube». Благодаря ценным комментариям хабралюдей, проект YTupload не был заброшен и забыт, а выложен на GitHub и усовершенствован.
Краткая аннотация
YTupload — проект, задача которого, конвертировать и загружать ролики на Ваш аккаунт в youtube. Написан на django.
Django Framework → Конвертируем и загружаем на YouTube
Доброго времени суток!
Итак начнём. В статье я опишу краткий проект на django, который конвертирует/загружает видео-ролики на Ваш канал YouTube.
Итак начнём. В статье я опишу краткий проект на django, который конвертирует/загружает видео-ролики на Ваш канал YouTube.
JavaScript → Новые возможности XMLHttpRequest2
Одним из незамеченных героев вселенной HTML5 является XMLHttpRequest 2. Строго говоря XHR2 не является частью HTML5 и не является самостоятельным объектом. XHR2 это тот же XMLHttpRequest, но с некоторыми изменениями. XHR2 является неотъемлемой частью сложных веб-приложений, поэтому ему стоит уделить большее внимание.
Наш старый друг XMLHttpRequest сильно изменился, но не многие знают о его изменениях. XMLHttpRequest Level 2 включает в себя новые возможности, которые положат конец нашим безумным хакам и пляскам с бубном вокруг XMLHttpRequest: кросс-доменные запросы, процесс загрузки файлов, загрузка и отправка двоичных данных. Эти возможности позволяют AJAX уверенно работать без каких-либо хаков с новейшими технологиями HTML5: File System API, Web Audio API, и WebGL.
В этой статье будут освещены новые возможности XMLHttpRequest, особенно те, которые можно использовать при работе с файлами.
Наш старый друг XMLHttpRequest сильно изменился, но не многие знают о его изменениях. XMLHttpRequest Level 2 включает в себя новые возможности, которые положат конец нашим безумным хакам и пляскам с бубном вокруг XMLHttpRequest: кросс-доменные запросы, процесс загрузки файлов, загрузка и отправка двоичных данных. Эти возможности позволяют AJAX уверенно работать без каких-либо хаков с новейшими технологиями HTML5: File System API, Web Audio API, и WebGL.
В этой статье будут освещены новые возможности XMLHttpRequest, особенно те, которые можно использовать при работе с файлами.
Подкасты → «Сделайте мне красиво!» Выпуск №22
Вашему вниманию очередной выпуск подкаста о веб-разработке «Сделайте мне красиво!»
Наши ссылки: RSS и лента на rpod.ru
Show notes:
- Paul Irish рассказывает об HTML5 Boilerplate
- Плагин загрузки файлов для jQuery
- Окончательно проясняем поведение оператора сравнения в JavaScript
- Отсчет времени на голом CSS3, т.е. да, без джаваскрипта
- Занимательные задачки по рисованию фигур из одного блока
- Статья девушки со сложным именем
- Удивительное лого CSS3
- Коллекция сайтов, активно использующих media queries
- Шесть способов запустить шестой IE
Наши ссылки: RSS и лента на rpod.ru
прослушан 481 раз
Блог компании Mail.Ru Group → Silverlight + nginx = возобновляемая загрузка файлов в браузере
В данной статье рассматривается опыт внедрения Silverlight-клиента для организации возобновляемой загрузки файлов на проекте Файлы@Mail.Ru.
Зачем это нужно? Думаю, не нужно рассказывать, что загрузку файлов на сервер и их хранение сейчас предоставляет очень большое количество веб-проектов, от небольших до очень крупных. Причем загрузка обычно реализована в виде обычного
Проблема состоит в том, что протокол HTTP изначально текстовый и для передачи больших объемов бинарных данных не очень приспособлен. Отсюда вытекает, что при обрыве связи у пользователя, перезагрузке компьютера и тому подобных факапах наполовину переданный файл приходится начинать загружать заново, а в случае с медленным каналом это превращается в настоящее издевательство.
Что делать?
Зачем это нужно? Думаю, не нужно рассказывать, что загрузку файлов на сервер и их хранение сейчас предоставляет очень большое количество веб-проектов, от небольших до очень крупных. Причем загрузка обычно реализована в виде обычного
<input type=file/>, реже — с помощью Flash, еще реже — иными средствами (загрузку по FTP в данной статье мы не рассматриваем).Проблема состоит в том, что протокол HTTP изначально текстовый и для передачи больших объемов бинарных данных не очень приспособлен. Отсюда вытекает, что при обрыве связи у пользователя, перезагрузке компьютера и тому подобных факапах наполовину переданный файл приходится начинать загружать заново, а в случае с медленным каналом это превращается в настоящее издевательство.
Что делать?
Персональные блоги → HTML + WebService. Upload файлов
Не могу оценить полезность этого знания для хабрасообщества, но на поиск нормального решения у меня ушли сутки и куча нервов.
Задача передать файл с html страницы, используя только html контролы. Приемником служит веб сервис написанный на C#.
Задача передать файл с html страницы, используя только html контролы. Приемником служит веб сервис написанный на C#.
Drupal → WYSIWYG image upload
Возможности:
Страница модуля
- Простой и быстрый интерфейс для загрузки картинок
- Поддержка редакторов TinyMCE, FCKeditr, YUI (Любой редактор, который поддерживает WYSIWYG модуль)
- Поддержка ImageCache. Возможность выбрать пресеты.
- Возможность установка произвольных размеров используя drag&drop
- Основан на WYSIWYG моделе и его API
- Возможность установить атрибуты картинки Title, Обтекание текстом, и Styles (Border, Spacing) и Пресеты ImageCache
- Полностью основан на Drupal FAPI
- Диалог основан на jquery ui dialog
Страница модуля
Персональные блоги → кроссдоменный UPLOAD файлов с прогресс баром, без перезагрузки страницы, и без использования флеш
Драсте всем.
Спасибо что решили почитать этот пост.
Задача состояла в следующем, в связи с тем что широко известный загрузчик файлов FancyUploader, не всегда, но довольно часто глючит, особенно если использовать прокси, нужно было разработать систему, по которой при загрузке файла показывался прогресс бар… Всё бы ничего, таких систем много, но все либо используют другие флеш загрузчики или иные Апи, что в данном случии являеться негативным результатом разработки.
После некоторого времени поиска была найдена система основанная на модуле apc habrahabr.ru/blogs/webdev/17620. Всё бы хорошо, но вешать дополнительный модуль кеша на сервер где кеш технологии уже используеться было безсмысленно. Тогда мне в руки попалась информация о NGINX upload progress module (http://wiki.nginx.org/NginxHttpUploadProgressModule) и это действительно работает… Тем более что на наших серверах установлен именно nginx в качестве fronе-end сервера.
Но самое интересное оказалось впереди.
Обычно загрузка файлов осуществяеться в то место где и лежит сам сайт (на тот же домен), но у нашей компании это не так. Все картинки и видео лежат на одельном сервере, и соответсвенно хорошо если upload был бы сразу на него, что бы не загружать канал сайта.
После конфигурирования nginx с upload progress module и использование примера с wiki.nginx.org/NginxHttpUploadProgressModule прогресс бар загрузки файла заработал.
Для пересылки самого файла на нужный сервер было изменено не много, и сам же сконфигурированных nginx естественно должен находиться на h_t_t_p://STORAGE-SERVER.com.
<
Спасибо что решили почитать этот пост.
Задача состояла в следующем, в связи с тем что широко известный загрузчик файлов FancyUploader, не всегда, но довольно часто глючит, особенно если использовать прокси, нужно было разработать систему, по которой при загрузке файла показывался прогресс бар… Всё бы ничего, таких систем много, но все либо используют другие флеш загрузчики или иные Апи, что в данном случии являеться негативным результатом разработки.
После некоторого времени поиска была найдена система основанная на модуле apc habrahabr.ru/blogs/webdev/17620. Всё бы хорошо, но вешать дополнительный модуль кеша на сервер где кеш технологии уже используеться было безсмысленно. Тогда мне в руки попалась информация о NGINX upload progress module (http://wiki.nginx.org/NginxHttpUploadProgressModule) и это действительно работает… Тем более что на наших серверах установлен именно nginx в качестве fronе-end сервера.
Но самое интересное оказалось впереди.
Обычно загрузка файлов осуществяеться в то место где и лежит сам сайт (на тот же домен), но у нашей компании это не так. Все картинки и видео лежат на одельном сервере, и соответсвенно хорошо если upload был бы сразу на него, что бы не загружать канал сайта.
После конфигурирования nginx с upload progress module и использование примера с wiki.nginx.org/NginxHttpUploadProgressModule прогресс бар загрузки файла заработал.
Для пересылки самого файла на нужный сервер было изменено не много, и сам же сконфигурированных nginx естественно должен находиться на h_t_t_p://STORAGE-SERVER.com.
<
Персональные блоги → Загрузка фотографий на сайт c помощью электронной почты
Это мой первый пост на Хабре, по этому не судите строго.
Реализовать возможность загрузки фотографий в профайл или в фотоленту события посредством электронной почты, поместить их в заданную папку и сделать соответственную запись в БД.
Пользователь отправляет письмо с фотографиями на адрес типа userXXX_eventYYY@mysite.com, где eventYYY — ID события; userXXX — ID пользователя. Такого e-mail адреса НЕ СУЩЕСТВУЕТ. По этому все письма отправленные на несуществующие адреса перенаправляем на image_upload@mysite.com. Потом, при считывании почты с этого адреса, парсим заголовки и узнаем на какой адрес изначально было отправлено письмо. Распарсив полученный адрес, узнаем КУДА складывать файлы и кто их залил.
Задача.
Реализовать возможность загрузки фотографий в профайл или в фотоленту события посредством электронной почты, поместить их в заданную папку и сделать соответственную запись в БД.
Алгоритм
Пользователь отправляет письмо с фотографиями на адрес типа userXXX_eventYYY@mysite.com, где eventYYY — ID события; userXXX — ID пользователя. Такого e-mail адреса НЕ СУЩЕСТВУЕТ. По этому все письма отправленные на несуществующие адреса перенаправляем на image_upload@mysite.com. Потом, при считывании почты с этого адреса, парсим заголовки и узнаем на какой адрес изначально было отправлено письмо. Распарсив полученный адрес, узнаем КУДА складывать файлы и кто их залил.