среда, 24 октября 2007 г.

Грузите апельсины бочками

9 Способов загрузить файлы на сервер

Перед любым web разработчиком рано или поздно становится проблема загрузки файлов на сервер. Заказчикам нужно размещать прайслист или поделиться фотографиями с конференции или …

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

1) По одному файлу


Самый простой способ - разместить поле для загрузки файла (<input type=’file’ />) и мучить пользователей загрузкой нескольких файлов по одному.

2) Несколько полей

Вместо одного поля размещаются несколько. Часто количество полей неограниченно и их можно добавлять и удалять через JavaScript. Гораздо удобнее, чем 1-й способ, но приходится выбирать загружаемый файл несколько раз. Занятие, я вам скажу, не из приятных. Когда приходится загружать файлы с именами IMG_XXXX.jpg, можно легко по ошибке выбрать один файл два раза или пропустить нужный.

3) Загрузка архива

Пользователь архивирует нужные файлы, а потом загружает архив через форму. Чуть-чуть экономим трафик пользователя, зато приходится делать лишние действия.
Кроме этого есть проблемы с распаковкой больших проблем, т.к. у PHP может просто
не хватить памяти для извлечения нескольких 5-7 мегапиксельных фотографий (стандартное ограничение на память – 8 МБ), у хостера может не быть нужного расширения и т.д.

4) Загрузка по FTP

FTP специально разработан для передачи файлов что понятно из его названия (File Transfer Protocol). Удобен, если файлы нужно загружать определенному кругу лиц.
Неудобств много:

1) Разделение пользователей. Создать FTP аккаунт не так просто, как добавить запись в базу. А на shared хостинге это почти невозможно
2) Настройка. Обычному пользователю не очень удобно устанавливать FTP клиент, разбираться с активным/пассивным режимом и т.д.

5) Отправка по почте

Такая возможность загрузки фотографий есть на Flickr и Picasa Web от Google. Человек отправляет на e-mail vasya.pupkin@photo.example.com письмо с приложениями, которые извлекаются и добавляются в фотоальбом.
Удобен только тогда, когда есть встроенный почтовый клиент. В Windows XP есть удобный мастер (Отправить -> Адресат), который позволяет маштабировать фотографии перед отправкой.
Но если вы пользуетесь web почтой, то получаете все неудобства 1-3 способов.
Кроме этого средствами PHP не очень просто принимать почту и извлекать из нее вложения.

6) Java апплет

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

7) Мастер публикации файлов в Web

Удобный мастер Проводника (Windows Explorer), позволяет публиковать файлы на веб узлах сайтах. Показывает статус загрузки, миниатюры загруженных изображений, в общем рай для обычного пользователя.
Недостатки:

1) Привязан к Windows XP (не знаю, есть ли такая возможность в Vista)

2) Необходимо запускать ключ реестра, что не каждый здравомыслящий пользователь сделает

В целом удобный способ для загрузки фотографий администраторами сайтов, дойдут руки - встрою такую возможность в админку своего движка.

8) Сторонняя программа

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

9) FancyUpload

Спасибо Жеке за интересную ссылку. Удобная штука, использующая Flash для выбора файлов и загрузки, HTML+Javascript для всего остального. Решение сложно в настройке, не передает cookies и http авторизацию. Для загрузки файлов из Firefox под Windows Flash часть использует движек IE. Зато есть очень красочное отображение прогресса загрузки файлов, в первый раз завораживает.

Средство более массовое, чем Мастер Публикации, но все равно лучше сделать обычную форму, на случай, если у пользователя запрещен Flash.

Пока еще не до конца протестировал FancyUpload, но скорее всего именно его буду использовать для загрузки фотоотчетов на свой сайт.

А какой способ загрузки используете вы?

5 комментариев:

jeka911 комментирует...

Зачетная статейка.

А что блоггер сам трекбеки не шлет?

Денис Радченко комментирует...

Пока не разобрался с этим. Вообще блоггер штука хорошая по сравнению с Livejournal, но чувствую, что скоро я перееду на standalone Wordpress блог.

Кстати, ты fancyupload использовал в реальных проектах? Как он себя зарекомендовал?

jeka911 комментирует...

Не, в реальных не юзал, так, побаловался только немного.

Все прелести стэндэлон я еще не оценил, а вот ностальгия какая-то за вордпрессом есть :)

Slav комментирует...

Я юзал в реальных проектах. То еще удовольствие. Выходит новый браузер или новый штепсель и начинаются косяки, которые разработчики решают лишь отчасти. В итоге на сегодня имеем целый зоопарк версий (1.0, 2.0, 2.0 fix) и все актуальные...

Денис Радченко комментирует...

Когда такая система использует целый букет технологий, количество граблей растет в геометрической прогрессии