Обработка загрузки файлов с помощью JavaScript и Google Gears, есть ли лучшее решение?


Итак, я уже некоторое время использую этот метод загрузки файлов, но, похоже, Google Gears плохо поддерживает новые браузеры, которые реализуют спецификации HTML5. Я слышал это слово. устарел плавает вокруг нескольких каналов, поэтому я ищу замену, которая может выполнять следующие задачи и поддерживать новые браузеры. Я всегда могу вернуться к gears / standard file POST, но следующие пункты значительно упрощают мой процесс:

  1. пользователи должен иметь возможность выбрать несколько файлов для загрузки в диалоговом окне.
  2. я должен иметь возможность получать обновления состояния при передаче файла. (индикаторы)
  3. я хотел бы иметь возможность использовать запросы PUT вместо POST
  4. я хотел бы иметь возможность легко присоединять эти события к существующим HTML-элементам с помощью JavaScript. Т. е. выбор файла должен быть вызван щелчком <button>.
  5. я хотел бы иметь возможность контролировать параметры ответа/запроса легко с помощью JavaScript.

Я не уверен, есть ли в новых браузерах HTML5 поддержка объектов desktop / request, используемых gears, или есть загрузчик flash, который имеет эти функции, которые я пропускаю в своих поисковых системах google.

Пример загрузки кода с помощью шестеренок:

// select some files:
var desktop = google.gears.factory.create('beta.desktop');
desktop.openFiles(selectFilesCallback);

function selectFilesCallback(files) {
  $.each(files,function(k,file) {
    // this code actually goes through a queue, and creates some status bars
    // but it is unimportant to show here...
    sendFile(file);
  });
}

function sendFile(file) {
  google.gears.factory.create('beta.httprequest');
  request.open('PUT', upl.url);
  request.setRequestHeader('filename', file.name);
  request.upload.onprogress = function(e) {
    // gives me % status updates...  allows e.loaded/e.total
  };
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      // completed the upload!
    }
  };
  request.send(file.blob);
  return request;
}

Edit: очевидно, flash не способен использовать запросы PUT, поэтому я изменил его на " like "вместо"must".

2 6

2 ответа:

(возникло из комментария к исходному вопросу, согласно предложению аскерса.)

Plupload является одним из самых новых малышей на блоке и он использует лучший метод доступен (в формате HTML 5, флеш, шестерни, платформы Silverlight): http://plupload.com/

Я ранее использовал флэш-версии, такие как http://www.webresourcesdepot.com/open-source-flash-uploader-multi-bit-shift/. они работают нормально и, будучи зависимыми только от flash, должны работать на большинстве компьютеров. Я не нашел надежного способа сделать это только с js, но flash можно контролировать с помощью js - особенно если вы пишете свой собственный.

Надеюсь, это поможет.