Я бы сказал, что настроил какое-то FTP-пространство или общий ресурс WebDAV. Если вы не можете этого сделать, я загружу изображения в одном (или небольшом числе) zip-файлов, вместо того, чтобы пытаться использовать сотни уникальных загрузок, что будет очень трудоемким, поскольку браузеры будут выбирать только один файл в то время в диалоговом окне загрузки файла (т. е. вы не можете просто выбрать полный каталог для загрузки).
Почему бы не использовать PHP в данном случае:
Дать простой обработчик загрузки файлов легко в PHP, но если вы хотите работать с очень большими загрузки, это совсем немного Tricker, как вам нужно будет опасаясь ограничений на загрузку размера файла, ограничений времени выполнения скриптов и ограничений памяти.Это может быть немного разочаровывающим в настройке в первый раз.
Если это файл с несколькими GB, который вы хотите обработать, загрузка HTTP не такая, как вы хотите (на основании этого, если вам нужно спросить, почему, заставить его работать так, как вы хотите, вероятно, будет очень расстраивающий процесс для вас).
В Mac OS существует несколько отличных FTP-клиентов, и нет оснований доверять веб-браузеру, чтобы быть лучшим способом передачи файлов, чем FTP-клиент.
Что касается поддержки прогресса:
Currenly прогресс бар поддержка очень ограничена в PHP (в настоящее время только с помощью 3-модулей сторонних которые немного волосатые), хотя я верю, что существует план, чтобы включить модуль в стандартное распространение. Googling для uploadprogress.so должен дать некоторые релевантные результаты.
В ответ на littlegreen:
Я использовал это расширение http://pecl.php.net/package/uploadprogress (который удалось конфликтовать по крайней мере одно расширение, как я установил уже - хотя я думаю, что они зафиксировали этот вопрос в настоящее время) и написал пользовательский Javascript обработчик (http://iaincollins.com/javascript/FileUploader.js), основанный на нескольких примерах в Интернете, с целью включения лучших из них. например Используя невидимый iframe для прозрачного возврата процесса загрузки, создайте диалоговое окно загрузки файла DHTML и замените уродливое управление загрузкой файлов на основе браузера, сделав его прозрачным и наложив его поверх моего собственного элемента управления (так что он по-прежнему доступен для кликов, так как вы можете 't вызывать диалог загрузки файлов из JavaScript, хотя вы можете получить имя файла, который был выбран для загрузки). Для нас особенно важно правильное оформление CSS-стиля - это довольно специфичный браузер.
JS Я написал, к сожалению, очень специфическую ситуацию, но у нее могут быть некоторые полезные элементы - извините, у меня нет ничего публичного, с которым я могу ссылаться, поскольку он был создан для частного интерфейса.
Я вижу, что сейчас есть плагин jQuery для uploadprogress - он не делает все, но это было бы неплохим стартом: http://nixbox.com/demos/jquery-uploadprogress.php ... Я помню, что были лучшие примеры, в том числе те, которые обрабатывали несколько загрузок файлов (путем их очередности и выполнения их последовательно - вам все равно приходилось выбирать один файл за раз), но, к сожалению, я не могу найти их.
Вывод:
Я хотел бы попробовать и избежать хлопот и сделать что-то вроде FTP пространства или частной/одноранговой приложение для передачи файлов, если у вас нет времени.
Протокол передачи файлов (как следует из названия) специально разработан для большой передачи файлов и является лучшим вариантом, так как ему потребуется небольшая конфигурация (вы не столкнетесь с ограничениями ресурсов), и вы можете разумно ожидать, что клиент получит Поддержка возобновления FTP, предполагая, что ваш сервер делает (т. Е. Если загрузочные киоски, они должны быть легко в состоянии возобновить его с того места, где они остановились, вместо того, чтобы начинать с нуля снова, как это было бы связано с загрузкой HTTP на основе PHP-файлов).
Хотя HTTP имеет возможность обрабатывать загрузку файлов, он не такой надежный, и различные ограничения ресурсов (на веб-сервере и на PHP - как упоминалось выше) должны быть явно настроены для того, чтобы сделать загрузку нескольких GB файл можно. Даже с помощью WebDAV (с использованием HTTP-сервера удаленной файловой системы) он прозрачен, но он не настолько прочен, как FTP, главным образом из-за ошибок в реализации клиентских приложений - в частности, могут возникать проблемы при передаче очень больших файлов на Windows и Mac OS, хотя он обычно отлично подходит для небольших (например, < 500 МБ) файлов.
В качестве дополнительной заметки спецификация HTML5 улучшит процесс обработки файлов - с возможностью одновременного загрузки нескольких файлов и с продолжением загрузки файлов в рамках спецификации, но пока это не вариант.
+1 для подробного ответа. –
Есть решения, основанные на вспышке, такие как www.swfupload.org. Они великолепны, но, как и PHP, не созданы для тысяч файлов и огромных объемов данных. FTP или P2P - это, безусловно, правильный путь. –
Да, стоит упомянуть. Обычно я предпочитаю не использовать Flash-варианты, если это возможно, но в этом случае стоит упомянуть, поскольку они более сложны, чем использование стандартного подхода к загрузке файлов в HTML, и я ожидаю, что обработка больших файлов будет намного лучше, чем большинство браузеров на их собственные. Я создал действительно гладкие дескрипторы файлов на основе DHTML в PHP + JS раньше, но это определенно только для посвященных, поскольку требуется справедливый бит хакера, если вам нужен сложный интерфейс с поддержкой кросс-браузера (roll on HTML5!). –