Новый модуль массовой загрузки файлов - Plupload

Главные вкладки

Аватар пользователя solomenikm solomenikm 24 июля 2010 в 14:47

Появился такой модуль: Plupload вообще очень многообещающий, но беда в том, что к нему вообще нет никакой документации. Может быть кто-то запускал его? Или совместными усилиями на удастся это сделать? В общем - нужна ваша помощь.

Отличительные особенности модуля: массовая загрузка не только через Flash, но и при помощи html5, Gears, Silverlight, BrowserPlus. Вообще я ищу альтернативу SwfUpload'еру - не нравиться он мне. Идеал - массовый загрузжчик фото с ресайзом на стороне клиента (см. Facebook). Мечта - чтобы все это была без участия Flash и Java.

Комментарии

Аватар пользователя solomenikm solomenikm 24 июля 2010 в 16:48

Супер! Обожаю когда подключаются только библиотеки (я, например, fancybox так подключал). Поделитесь с сообществом, если не сложно, как именно Вам удалось это сделать.

Аватар пользователя solomenikm solomenikm 24 июля 2010 в 16:49

kyky wrote:
Я использовал саму библиотеку, не модуль, впечатления самые приятные.

Как Вам это удалось сделать? Расскажите нам пожалуйста.

Аватар пользователя ihappy ihappy 24 июля 2010 в 17:28

"kyky" wrote:
Я использовал саму библиотеку, не модуль, впечатления самые приятные.

поподробней можно? я сейчас сам хочу интегрировать на сайт.
буду чрезмерно благодарен.

Аватар пользователя kyky kyky 24 июля 2010 в 17:47

Я использовал ее не в друпале, а GAE-приложении, написанном на Python.
Настраивается библиотека легко, по сути, ей требуется передать id дива и задать дополнительные параметры, думаю, вы можете посмотреть, как это делается в файлах примеров самой библиотеки.
Главное, это описать обработчик, принимающий файлы.
Т.к. билиотека делает обычный POST-запрос, то все файлы буду в $_FILES, и вам останется их обработать.
Всю инфу по работе с Plupload я брал отсюда:
http://blog.notdot.net/2010/04/Implementing-a-dropbox-service-with-the-B...
http://blog.notdot.net/2010/04/Implementing-a-dropbox-service-with-the-B...
Вот код оттуда:

<html>
<head>
  <title>File Hangar: Upload file</title>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  <script type="text/javascript" src="/static/plupload/gears_init.js"></script>
  <script type="text/javascript" src="/static/plupload/plupload.full.min.js"></script>
  <script type="text/javascript">
    $(function() {
      var uploader = new plupload.Uploader({
        runtimes: 'gears,html5,flash,html4',
        browse_button: 'pickfiles',
        container: 'container',
        url: '{{form_url}}',
                                use_query_string: false,
                                multipart: true,
                                flash_swf_url: '/static/plupload/plupload.flash.swf',
      });
      uploader.bind('FilesAdded', function(up, files) {
        $.each(files, function(i, file) {
          $('#filelist').append(
            '<div id="' + file.id + '">' +
            'File: ' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b>' +
            '</div>'
          );
        });
      });
      uploader.bind('UploadProgress', function(up, file) {
        $('#' + file.id + ' b').html(file.percent + '%');
      });
      uploader.bind('FileUploaded', function(up, file, response) {
                                window.location = response.response;
      });
      uploader.bind('Error', function(up, err) {
                          alert("Upload error: " + err.message);
      });
                        uploader.bind('QueueChanged', function(up) {
        uploader.start();
      });
     
      uploader.init();
    });
  </script>
</head>
<body>
  <p style="float: right"><a href="{{logout_url}}">Log Out</a></p>
  <h1>Upload a file to App Engine File Hangar</h1>
        <form>
                <div id="container">
                        <div id="filelist"></div>
                        <a id="pickfiles" href="#">[Upload files]</a>
                </div>
        </form>
</body>
</html>

Вначале погружаются файлы библиотеки, указывается id дива, который будет замещен формой загрузки ('container'). runtimes Определяет, какой тип виджета использовать.
{{form_url}} в системе шаблонизации django означает action формы, т.е. урл, куда будут грузиться файлы.
Ну и добавляются прогресс бары и тд.

Аватар пользователя solomenikm solomenikm 24 июля 2010 в 17:54

kyky wrote:
Т.к. билиотека делает обычный POST-запрос, то все файлы буду в $_FILES, и вам останется их обработать.

Вот тут возникает много вопросов Smile

Аватар пользователя kyky kyky 24 июля 2010 в 17:59

Да, проблема в том, что друпал не сохраняет переменные POST, а использует свою систему форм.
Поэтому вам нужен свой обработчик, который будет работать с $_POST и $_FIELS напрямую.
Для этого нужжен скрипт или модуль.
Как вклинить plupload в друпальские формы, я не знаю.
А вообще, зачем вам эта библиотека? В друпале же есть ahah-загрузка.

Аватар пользователя solomenikm solomenikm 24 июля 2010 в 18:05

kyky wrote:
А вообще, зачем вам эта библиотека? В друпале же есть ahah-загрузка.

Две причины: Массовая загрузка (fupload (использует swfupload) - убог), ресайз картинок на стороне клиента.

Аватар пользователя kyky kyky 24 июля 2010 в 18:18

Ну тогда остается писать свой модуль.
Сделайте обработчик меню, куда будут грузиться картинки.
В обработчике просматривайте $_FILES и сохраняйте file_save_upload и др. полезными функциями для работы с файлами: http://api.drupal.org/api/group/file/6

Аватар пользователя solomenikm solomenikm 24 июля 2010 в 18:35

kyky wrote:
Ну тогда остается писать свой модуль.

Да в том-то и дело, что вроде модуль уже пишеться, только он не доделан немного. Документации нет, а "из коробки" что-то он никак. Может быть потестируем вместе, всем сообществом?

Аватар пользователя ihappy ihappy 24 июля 2010 в 18:39

"kyky" wrote:
Ну тогда остается писать свой модуль.

да нет, как бы постом много чего ловится. тот же AHAH через POST ловить можно.

"kyky" wrote:
Да, проблема в том, что друпал не сохраняет переменные POST, а использует свою систему форм.
Поэтому вам нужен свой обработчик, который будет работать с $_POST и $_FIELS напрямую.

Вот сейчас этим и занимаюсь) хоть и есть модуль интегратор, но дев версиям не верю. лучше самому помучатся пару дней и сделать по своему. Да и практика нужна.
спасибо за пример, многое объяснило.

Аватар пользователя VasyOK VasyOK 14 августа 2011 в 15:58

Проблема скорее всего в настройках вашего браузера.

Люди а этот модуль поддерживает массовую загрузку с сервера? Если нет, какой поддерживает?