Загрузить большие файлы в Dropbox через HTTP API - PullRequest
1 голос
/ 06 июля 2019

В настоящее время я внедряю механизм загрузки файлов с моего веб-сервера в каталог приложений Dropbox.

Как указано в документации API, есть конечная точка / upload (https://www.dropbox.com/developers/documentation/http/documentation#files-upload), которая принимает файлы размером до 150 МБ. Однако я имею дело с изображениями и видео с потенциальным размером до 2 ГБ.

Поэтому мне нужно использовать конечные точки upload_session. Существует конечная точка для начала сеанса (https://www.dropbox.com/developers/documentation/http/documentation#files-upload_session-start), для добавления данных и завершения сеанса.

В настоящее время мне неясно, как именно использовать эти конечные точки. Нужно ли разбивать мой файл на моем сервере на 150-мегабайтные куски (как бы я это сделал с видеофайлом?), А затем загружать первый чанк с помощью / start, следующие чанки с помощью / append и последний с помощью / finish? Или я могу просто указать файл и API как-то (??) делает расщепление для меня? Очевидно, что нет, но я почему-то не могу понять, как мне вычислять, разбивать и хранить фрагменты на моем веб-сервере, чтобы не потерять сеанс между ними ...

Будем благодарны за любые советы или дополнительные ссылки. Спасибо!

1 Ответ

2 голосов
/ 09 июля 2019

Как отметил Грег в комментариях, вы решаете, как управлять «кусками» файлов.В дополнение к его примеру .NET Dropbox имеет хорошую реализацию сеанса загрузки в JavaScript примере загрузки из Dropbox API v2 JavaScript SDK .

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

  1. Вызов / files / upload_session / start .Используйте полученный session_id в качестве параметра в следующих методах, чтобы Dropbox знал, с каким сеансом вы взаимодействуете.
  2. Поэтапно передавайте каждый "кусок" файла в / files / upload_session / append_v2 .Несколько вещей, о которых следует знать:

    • Вызов first вернет cursor, который используется для перебора фрагментов файла в определенном порядке.Он передается в качестве параметра при каждом последующем вызове этого метода (курсор обновляется при каждом ответе).
    • Последний вызов должен включать свойство "close": true, которое закрывает сеанс, чтобы его можно было загрузить.
  3. Передайтеокончательный cursorcommit информация) до / files / upload_session / finish .Если вы видите новые метаданные файла в ответе, то вы сделали это !!

...