Вы здесь

Привязка кастомной формы к amazon s3

0

Есть форма. В ней поле для загрузки файлов с помощью plupload.
Надо, чтобы файлы загружались за amazon
Установлен модуль amazons3.
Когда в сабмите прописан обычный алгоритм сохранения файла, но прописала схема 's3://', выдается ошибка о том, что файл не может быть скопирован, ибо дестинейшен директори сконфигурирован неправильно.

Когда пробую загрузить файл, как описано в руководстве здесь http://docs.aws.amazon.com/AmazonS3/latest/dev/usingHLmpuPHP.html
То долго-долго что-то грузится и в итоге ругается, что закончилось время коннекта.

Кто грузил на amazon через кастомную форму? Как это сделать?

Вот такой обычный код для сохранения через plupload (он вообще рабочий, если схему public указывать)

$saved_files = array();
  $scheme = variable_get('file_default_scheme', 's3') . '://';

  foreach ($form_state['values']['file'] as $uploaded_file) {
    if ($uploaded_file['status'] == 'done') {
      $source = $uploaded_file['tmppath'];
      $destination = file_stream_wrapper_uri_normalize($scheme . $uploaded_file['name']);
      // Rename it to its original name, and put it in its final home.
      // Note - not using file_move here because if we call file_get_mime
      // (in file_uri_to_object) while it has a .tmp extension, it horks.
      $destination = file_unmanaged_move($source, $destination, FILE_EXISTS_RENAME);
      $file = plupload_file_uri_to_object($destination);
      file_save($file);
      $fi[] = $file->fid;
      $saved_files[] = $file;
    }
    else {
      // @todo: move this to element validate or something and clean up t().
      form_set_error('file', "Upload of ".$uploaded_file['name']." failed");
    }
  }
Версия Drupal: 
7.x
Категория: 
File API
Вопрос задан 19.08.2015 - 18:21

а заливка файлов в обычные file field с схемой s3 работает?

Комментарий оставлен 19.08.2015 - 21:06

Нашлось такое решение (применено оно в backup migrate).
Вот отсюда скачивается класс http://undesigned.org.za/2007/10/22/amazon-s3-php-class/
подключается и настраивается загрузка файлов через него.
Вот документация к классу.
http://undesigned.org.za/2007/10/22/amazon-s3-php-class/documentation

Но остается пара вопросов о том, как все это реализовать таким образом, чтобы корректно в друпал где надо прописалось и запомнилось.
Первый момент: рекомендуют сначала сохранять файлы у себя на сервере, а потом по крону переправлять на амазон, чтобы они не потерялись при закачке.
Второй момент: надо имхо сохранять инфо о файле в БД.

Остается вопрос как это все упорядочить.
Первый алгоритм.
1. Загружаем файл через форму, сохраняем как и положено по схеме public:// и тогда же файл прописывается в БД.
2. По крону перекидываем на амазон и меняем uri файла в БД.

Второй алгоритм.
При загрузке файла через форму проверяем коннект с амазоном, грузим на амазон и создаем запись в БД. (И так для каждого файла).
Если коннекта нет, то сохраняем файл у себя и дальше по схеме 1.

Или как-то еще?
В модуле amazons3 реализована какая-то такая схема, но я не совсем разобралась, что там куда и откуда растет.

Комментарий оставлен 20.08.2015 - 14:12

Ответы