FineUploader загружает в стойло Azure на устройствах Android

Я пытаюсь заставить FineUploader загружать данные непосредственно в хранилище BLOB-объектов Azure.

Я следовал инструкциям, настроил демонстрационную страницу с загрузчиком на ней, настроил свою учетную запись хранения BLOB-объектов для CORS и настроил сервер SAS. Кажется, все работает, как и ожидалось, в настольных браузерах и на моих устройствах iOS, но загрузка на моих устройствах Android, похоже, постоянно останавливается где-то на отметке 8 мегабайт.

Иногда зависание никогда не восстанавливается, в других случаях кажется, что оно восстанавливается, загружает еще ~ 8 мегабайт и снова зависает. В любом случае кажется, что он застрял на PUT на 2,2 минуты. Я не уверен, имеет ли какое-либо значение эта продолжительность, но пока что она очень постоянна в моем тестировании.

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

Я пробовал на 2 устройствах Android (4.3 и 4.4) в 2 сетях Wi-Fi и 4G с теми же результатами.

У меня есть страницы со встроенным загрузчиком, которые отображаются по следующим URL-адресам:

http://fineuploadertest.blob.core.windows.net/cdn/index.htm (фрагменты по 4 мегабайта)

index2.htm (блокировка отключена) и index3.htm (блоки по 1 мегабайту) находятся в одном каталоге, если вы хотите их проверить.

На данный момент у меня заканчиваются идеи, кто-нибудь еще сталкивался с этим или у меня есть какие-либо дополнительные идеи, которые я могу попробовать?

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

ПУТы 1-7 удались за 2-4 секунды каждый, пут 8 застопорился на 2,2 минуты. Заявленная ошибка была «net::ERR_SSL_PROTOCOL_ERROR», но я не уверен, действительно ли это важно или это просто ветвь по умолчанию в обработке ошибок.

[Fine Uploader 5.0.2] Parsing template
[Fine Uploader 5.0.2] Template parsing complete
[Fine Uploader 5.0.2] Rendering template in DOM.
[Fine Uploader 5.0.2] Template rendering complete
[Fine Uploader 5.0.2] Received 1 files or inputs. 
[Fine Uploader 5.0.2] Attempting to validate image. 
[Fine Uploader 5.0.2] Sending chunked upload request for item 0: bytes 1-1048576 of 27179814 
[Fine Uploader 5.0.2] Submitting GET SAS request for a PUT REST request related to file ID 0.0. 
[Fine Uploader 5.0.2] Sending GET request for 0.0 
[Fine Uploader 5.0.2] GET SAS request succeeded. 
[Fine Uploader 5.0.2] Submitting Put Block request for 0.0 = part 0 
[Fine Uploader 5.0.2] Sending PUT request for 0.0 
[Fine Uploader 5.0.2] Put Block call succeeded for 0 
[Fine Uploader 5.0.2] Chunked upload request succeeded for 0, chunk 0 
[Fine Uploader 5.0.2] Chunk 0 for file 0 uploaded successfully. 
[Fine Uploader 5.0.2] Sending chunked upload request for item 0: bytes 1048577-2097152 of 27179814 
[Fine Uploader 5.0.2] Submitting GET SAS request for a PUT REST request related to file ID 0.1. 
[Fine Uploader 5.0.2] Sending GET request for 0.1 
[Fine Uploader 5.0.2] GET SAS request succeeded. 
[Fine Uploader 5.0.2] Submitting Put Block request for 0.1 = part 1 
[Fine Uploader 5.0.2] Sending PUT request for 0.1 
[Fine Uploader 5.0.2] Put Block call succeeded for 0 
[Fine Uploader 5.0.2] Chunked upload request succeeded for 0, chunk 1 
[Fine Uploader 5.0.2] Chunk 1 for file 0 uploaded successfully. 
[Fine Uploader 5.0.2] Sending chunked upload request for item 0: bytes 2097153-3145728 of 27179814 
[Fine Uploader 5.0.2] Submitting GET SAS request for a PUT REST request related to file ID 0.2. 
[Fine Uploader 5.0.2] Sending GET request for 0.2 
[Fine Uploader 5.0.2] GET SAS request succeeded. 
[Fine Uploader 5.0.2] Submitting Put Block request for 0.2 = part 2 
[Fine Uploader 5.0.2] Sending PUT request for 0.2 
[Fine Uploader 5.0.2] Put Block call succeeded for 0 
[Fine Uploader 5.0.2] Chunked upload request succeeded for 0, chunk 2 
[Fine Uploader 5.0.2] Chunk 2 for file 0 uploaded successfully. 
[Fine Uploader 5.0.2] Sending chunked upload request for item 0: bytes 3145729-4194304 of 27179814 
[Fine Uploader 5.0.2] Submitting GET SAS request for a PUT REST request related to file ID 0.3. 
[Fine Uploader 5.0.2] Sending GET request for 0.3 
[Fine Uploader 5.0.2] GET SAS request succeeded. 
[Fine Uploader 5.0.2] Submitting Put Block request for 0.3 = part 3 
[Fine Uploader 5.0.2] Sending PUT request for 0.3 
[Fine Uploader 5.0.2] Put Block call succeeded for 0 
[Fine Uploader 5.0.2] Chunked upload request succeeded for 0, chunk 3 
[Fine Uploader 5.0.2] Chunk 3 for file 0 uploaded successfully. 
[Fine Uploader 5.0.2] Sending chunked upload request for item 0: bytes 4194305-5242880 of 27179814 
[Fine Uploader 5.0.2] Submitting GET SAS request for a PUT REST request related to file ID 0.4. 
[Fine Uploader 5.0.2] Sending GET request for 0.4 
[Fine Uploader 5.0.2] GET SAS request succeeded. 
[Fine Uploader 5.0.2] Submitting Put Block request for 0.4 = part 4 
[Fine Uploader 5.0.2] Sending PUT request for 0.4 
[Fine Uploader 5.0.2] Put Block call succeeded for 0 
[Fine Uploader 5.0.2] Chunked upload request succeeded for 0, chunk 4 
[Fine Uploader 5.0.2] Chunk 4 for file 0 uploaded successfully. 
[Fine Uploader 5.0.2] Sending chunked upload request for item 0: bytes 5242881-6291456 of 27179814 
[Fine Uploader 5.0.2] Submitting GET SAS request for a PUT REST request related to file ID 0.5. 
[Fine Uploader 5.0.2] Sending GET request for 0.5 
[Fine Uploader 5.0.2] GET SAS request succeeded. 
[Fine Uploader 5.0.2] Submitting Put Block request for 0.5 = part 5 
[Fine Uploader 5.0.2] Sending PUT request for 0.5 
[Fine Uploader 5.0.2] Put Block call succeeded for 0 
[Fine Uploader 5.0.2] Chunked upload request succeeded for 0, chunk 5 
[Fine Uploader 5.0.2] Chunk 5 for file 0 uploaded successfully. 
[Fine Uploader 5.0.2] Sending chunked upload request for item 0: bytes 6291457-7340032 of 27179814 
[Fine Uploader 5.0.2] Submitting GET SAS request for a PUT REST request related to file ID 0.6. 
[Fine Uploader 5.0.2] Sending GET request for 0.6 
[Fine Uploader 5.0.2] GET SAS request succeeded. 
[Fine Uploader 5.0.2] Submitting Put Block request for 0.6 = part 6 
[Fine Uploader 5.0.2] Sending PUT request for 0.6 
[Fine Uploader 5.0.2] Put Block call succeeded for 0 
[Fine Uploader 5.0.2] Chunked upload request succeeded for 0, chunk 6 
[Fine Uploader 5.0.2] Chunk 6 for file 0 uploaded successfully. 
[Fine Uploader 5.0.2] Sending chunked upload request for item 0: bytes 7340033-8388608 of 27179814 
[Fine Uploader 5.0.2] Submitting GET SAS request for a PUT REST request related to file ID 0.7. 
[Fine Uploader 5.0.2] Sending GET request for 0.7 
[Fine Uploader 5.0.2] GET SAS request succeeded. 
[Fine Uploader 5.0.2] Submitting Put Block request for 0.7 = part 7 
[Fine Uploader 5.0.2] Sending PUT request for 0.7 
PUT https://fineuploadertest.blob.core.windows.net/file//e3cac46f-87b3-474c-a9b…PyNBZRTc%3D&se=2014-06-23T22%3A55%3A08Z&sp=w&comp=block&blockid=MDAwMDc%3D net::ERR_SSL_PROTOCOL_ERROR /file//e3cac46f-87b3-474c-a9b8-5393cd2e8b1e.mp4?sv=2014-02-14&sr=b&sig=SyXr…NBZRTc%3D&se=2014-06-23T22%3A55%3A08Z&sp=w&comp=block&blockid=MDAwMDc%3D:1
[Fine Uploader 5.0.2] PUT request for 0.7 has failed - response code 0 
[Fine Uploader 5.0.2] Put Block call failed for ID 0 on part 7 
[Fine Uploader 5.0.2] Received error response:  
[Fine Uploader 5.0.2] Chunked upload request failed for 0, chunk 7 

person Jay Oliver    schedule 23.06.2014    source источник
comment
Какая версия или версии андроида?   -  person Ray Nicholus    schedule 24.06.2014
comment
Я тестировал Galaxy Nexus с 4.2 или 4.3 и Droid Maxx с 4.4.   -  person Jay Oliver    schedule 24.06.2014
comment
Чтобы уточнить: файлы меньшего размера быстро увеличиваются, и фрагменты объединяются в окончательный файл, как и ожидалось.   -  person Jay Oliver    schedule 24.06.2014
comment
Я предполагаю, что любой файл, который должен быть разбит более чем на один фрагмент, не работает в Android. Это верно?   -  person Ray Nicholus    schedule 24.06.2014
comment
Нет, я определенно вижу, как несколько блоков поднимаются и рекомбинируются с файлами, превышающими размер фрагмента. Я могу столкнуться с каким-то пределом или граничным условием, но я не думаю, что это конкретное. Приведенный выше журнал отладки был с размером фрагмента 1 мегабайт, и несколько фрагментов поднялись, и на 8-м (который не был последним) произошел сбой. Вы можете протестировать на моем демонстрационном сайте, если у вас есть под рукой устройство Android.   -  person Jay Oliver    schedule 24.06.2014
comment
Интересно, связано ли это с тем фактом, что ваш сервер подписи не возвращает действительный URL-адрес SAS. Например, ваш сервер возвращает URL-адреса SAS в своем ответе на запрос подписи Fine Uploader следующим образом: fineuploadertest.blob.core.windows.net/file//62c.... Обратите внимание на две косые черты после ссылки fineuploadertest.blob.core.windows.net/file. Можете ли вы исправить свой сервер, чтобы он возвращал действительный URL-адрес, и посмотреть, есть ли проблемы с Android? Я не могу точно объяснить, почему он не выходит из строя сразу.   -  person Ray Nicholus    schedule 24.06.2014
comment
Вы также можете попробовать те же загрузки с конечной точкой без SSL для контейнера хранилища BLOB-объектов Azure и посмотреть, поможет ли это вообще. Ошибка протокола предполагает, что у Android могут быть проблемы с SSL.   -  person Ray Nicholus    schedule 24.06.2014
comment
Двойная косая черта, похоже, не оказала влияния, но переход на конечную точку HTTP, похоже, решает проблему. Рабочий пример: fineuploadertest.blob.core.windows.net/cdn/index3-nossl.htm Я никогда раньше не сталкивался с такими проблемами SSL в браузерах Android. Для моего варианта использования я не вижу проблемы с переключением на HTTP, но для моего собственного любопытства, вы когда-нибудь сталкивались с этим раньше? Это специфично для Azure?   -  person Jay Oliver    schedule 24.06.2014
comment
Я нашел этот другой SO Question, который, кажется, указывает, что это может может быть проблема с SSL хранилища BLOB-объектов: . Сейчас я собираюсь переключиться на HTTP, так как мои данные для этого варианта использования не требуют безопасности. Большое спасибо за Вашу помощь.   -  person Jay Oliver    schedule 24.06.2014
comment
Проблема, как вы заметили, скорее всего, связана с Azure. На данный момент не так много людей используют Azure (большинство вместо этого используют AWS/S3), поэтому я не уверен, что это хорошо понятая проблема. Я бы предложил описать ваше решение как ответ на ваш собственный вопрос здесь, чтобы другие могли извлечь выгоду.   -  person Ray Nicholus    schedule 24.06.2014


Ответы (1)


Эта проблема, по-видимому, не является ошибкой Fineuploader, а скорее является результатом того, как SSL работает в хранилище BLOB-объектов Azure, что позволяет передавать только определенный объем данных в одном сеансе HTTPS (около 5 мегабайт в моем тестировании). ).

Корпорация Майкрософт признала наличие проблемы, но ETA пока нет. исправление. Я не понимаю, почему эта проблема затрагивает только некоторые реализации SSL.

Тем временем, если вам нужно разрешить загрузку больших файлов в хранилище BLOB-объектов Azure из браузера и у вас возникают проблемы с Android или другими браузерами, существуют следующие обходные пути:

1) Переключитесь на конечную точку без SSL (HTTP), если ваш вариант использования не требует безопасной передачи данных.

2) Не загружайте напрямую в хранилище BLOB-объектов, а вместо этого загружайте его в настраиваемую конечную точку, а затем попросите эту конечную точку скопировать файл в хранилище BLOB-объектов. Это нормально, если эта конечная точка размещена на веб-сайте Azure, в веб-роли или рабочей роли, эта проблема их не затрагивает.

Вы можете найти дополнительную информацию о настройке традиционного сервера загрузки Fineupload здесь.

person Jay Oliver    schedule 24.06.2014
comment
Отличные детали. Спасибо! - person Ray Nicholus; 24.06.2014