2010-03-04 5 views
0

Я немного бормочу с различными решениями, которые я бы рассматривал как довольно распространенную проблему, но я еще не смог ее решить удовлетворительным образом.Обработка загрузок файлов в Drupal

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

Что я использую до сих пор представляет собой комбинацию модулей в filefield, filefield_sources, imce и ckeditor. Думаю, ckeditor не очень важен для решения, но мне нужно как-то вставлять изображения из архива, и это делается с помощью IMCE. Так как я не хочу, чтобы все было доступно из файла filebrowser, я создал подкаталог и установил полный доступ к нему в настройках IMCE, позвонил ему default/files/site

Это работало нормально, пока все файлы были сделаны через IMCE, но когда Я загружал файлы непосредственно с файлового поля, мои файлы попадали в корень по умолчанию/файлы, поэтому я настраивал папки для своих полей, например default/files/site/movies в поле, которое допускало формат .flv. Это работало нормально, пока я не пытался получить доступ к файлам через IMCE. Похоже, папки, созданные файловым полем, недоступны из IMCE?

Я также могу поддерживать большие загрузки (200 Мбайт +), но из моего опыта в других проектах, позволяя загрузку файлов через FTP, как правило, спасает жизнь, но из того, что я понимаю, t файлы поддержки, которые не загружаются через Drupal в некотором роде, так как их нет в базе данных (давая сообщение: The selected file could not be used because the file does not exist in the database.)

Я знаю, что у меня действительно нет четкого вопроса к моей проблеме, но почему-то Мне нужно понять это довольно быстро. Как я могу это решить? Я знаю, что я не первый, кто столкнулся с этой проблемой, но я еще не смог найти хорошее и стабильное решение. Что мне не хватает?

ответ

0

Ну, я лично не знаком с IMCE, но если вам нужны файлы, которые были добавлены через ftp для добавления в таблицы файлов, то моим импульсом было бы написать небольшой модуль, который затем позволит пользователю нажать кнопку и начать пакетный процесс. (Это я полагаю, что вы используете Drupal 6, так как пакет api не существует в 5.)

Этот пакетный процесс затем перебирал все файлы в соответствующем каталоге, что я бы предположил, что вы загрузите файлы, используйте file_copy() (из API файлов Drupal), чтобы скопировать файлы по умолчанию/файлы/сайт, а затем добавить указанные файлы в таблицу файлов, что на самом деле довольно просто с drupal_write_record().

Возможно, даже не потребуется использовать пакетный api - это имеет значение, если вы просто загружаете 10-30 действительно больших файлов или файлы размером 200-300 МБ.

Для использования пакетного api, я бы посмотрел на http://drupal.org/node/180528 - у этого есть довольно простой пример того, как работает пакетная api, которая в основном состоит в том, чтобы сообщать api, что вы хотите продолжать вызов функции_a, а затем внутри функции function_a устанавливая ваш прогресс в массиве контекста, пока вы не закончите, когда закончится пакетный процесс. Тогда у вас есть только тот, кто загружает файлы через ftp, чтобы нажать кнопку на веб-сайте, чтобы переместить и зарегистрировать файлы.

+0

Выглядит довольно прямо вперед, я буду смотреть на него, когда есть больше времени, так как это может быть реализовано на более поздний этап, спасибо за совет :) – Marco