Как отправить большой файл(аудио или видео) на сервер с android приложения правильно?

Допустим есть сервер на php и клиент на Java. Мне нужно, чтобы пользователь мог отправить файл размером свыше 50 мб на сервер через service, но таким образом, что если телефон выключится или интернет будет временно недоступен, то загрузка приостановится и начнется с того же самого места. Плюс вместе с этим файлом отправится описание и все вместе сохранится в базе данных MySQL. То есть мне нужно отправку файлов на сервер реализовать так же, как реализовано в Instagram или YouTube. Но я не когда раньше так не делал и не знаю с чего начать и что для этого нужно.
  • Вопрос задан
  • 1030 просмотров
Пригласить эксперта
Ответы на вопрос 2
CellycoMobiles
@CellycoMobiles
indi developer @CellycoMobiles
Взрослые разработчики используют заголовки. Никто не ограничивает вас в использовании заголовка Content-Range в запросе.

Прошу прощения, позволю себе использовать синтаксис httpie.

POST "/upload/"
Content-Type:[MEDIA_TYPE]
Content-MD5:[BASE64_MD5_FILE]
Content-Range: bytes [FROM_BYTES]-[TO_BYTES]/[FILE_SIZE]
file@file.ext

Один эндпойнт. Без бойлерплейта из трех разных запросов.
bytes 0-? : создаёт файл, рекомендовал бы создавать с именем md5;
bytes ? -? : запись в файл
bytes ? - total_size : запись в файл, проверка контрольной суммы, переименование.

Размер чанка = ширина канала >> 1
Ответ написан
Комментировать
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Реализуете следующие api
/api/continuousupload - принимает multipart/form-data
/api/continuousuploadcreate - создает длительную закачку на сервере
/api/continuousuploadinfo - отдает информацию по чанку

На клиенте
1. /api/continuousuploadcreate - создаете закачку сервер возвращает id
2. бьете файл на чанки пусть по 2 мегабайта отправляете через /api/continuousupload
3. сервер в мета файле записывает позицию указатель и записывает поток байт принятый от /api/continuousupload
4. При обрыве связи сервер отдает точно записанные данные через /api/continuousuploadinfo клиент передает чанк начиная с позиции

Соответственно и на сервере и на клиенте нужно вычислять контрольные суммы при передаче.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы