Загрузка файлов с помощью Gears & PHP - PullRequest
1 голос
/ 01 февраля 2010

Мы предоставляем возможность отправлять изображения в галерею пользователя.

Хотя обычный метод, который мы использовали, работает просто отлично, некоторые люди загружают несколько файлов, что может занять много времени и раздражает в процессе выбора (по одному за раз).

Я начал писать альтернативный метод с использованием Gears для тех, у кого он есть. В первую очередь цель состоит в том, чтобы заменить выбор файла и предоставить индикатор выполнения для загрузки (который помогает уменьшить разочарование при загрузке нескольких больших файлов).

Я все это сделал.

Я ссылался на код Movie Uploader здесь (http://uploadmovietool.appspot.com/), который демонстрирует загрузку файлов с использованием метода чанков. У меня он загружается правильно, сервер принимает чанки, однако я столкнулся с проблемой, пытаясь обработать входящие данные с PHP.

Каждый чанк - это отдельный запрос к сценарию, и ни одна из данных не регистрируется в обычных входных данных PHP: vars _POST, _GET, _FILES и т. Д. Я, наконец, смог получить данные от сосать $GLOBALS['HTTP_RAW_POST_DATA'] однако даже при добавлении данных в один и тот же файл изображение никогда не завершается. Это покажет части, но что-то всегда не так.

.. При этом ... если есть более простой способ опубликовать файлы в сценарии, но при этом иметь доступ к обновлениям прогресса, я хотел бы услышать это.

Когда я начинал этот проект, я предполагал, что Gears предоставит мне способ сделать многочастную публикацию с файлами, как обычно, и просто даст мне событие с интервалом с информацией о прогрессе. Если это как-то возможно (а я явно пропустил это), пожалуйста, дайте мне знать.

Для ясности: мы осведомлены о том, что HTML5 поддерживает механику прогрессии, и готовы реализовать на ее основе, как только она станет жизнеспособной. :)

Для дальнейшей справки:

Заголовки, которые я отправляю вместе с сообщением (согласно примеру загрузчика фильмов Google):

Request.setRequestHeader( 'Content-Disposition', 'attachment; filename="' + self._fileName + '"' );
Request.setRequestHeader( 'Content-Type', 'application/octet-stream' );
Request.setRequestHeader( 'Content-Range', 'bytes ' + byteRange );

Спасибо всем, кто может помочь.

1 Ответ

0 голосов
/ 01 февраля 2010

Из вашего описания похоже, что PHP может не правильно писать файл. Не знаю почему.

Тем не менее, это неприятная проблема. Например, Facebook (который также использует PHP, как вы знаете) решил написать плагин NPAPI для реализации этой функции.

http://www.facebook.com/note.php?note_id=178492968919

Кроме того, вы можете рассмотреть менее переносимый вариант написания расширений браузера. Это довольно легко сделать в Firefox и Chrome и даст вам хороший временный вариант для пользователей этих браузеров.

...