Как вы извлекаете файлы размером более 64 КБ с помощью Cloud Storage JSON API?

Мне нужно получить файлы в моем веб-приложении, размер которых превышает 64 КБ. Прямо сейчас, в v1beta1 JSON API, Google разрешает загрузку/выгрузку только размером 64 КБ через свой JSON API. Я понял, как загружать файлы размером более 64 КБ, используя «возобновляемую» загрузку (не через интерфейс, который v1beta1 предоставляет в своем JSON API, а вручную).

Чего я не могу понять, так это хорошего способа скачать. Прямо сейчас я делаю список ACL общедоступным для объекта, который хочу загрузить, загружаю файл, а затем удаляю общедоступный ACL для объекта. Это не только неэффективно, но и не очень чисто. Есть ли лучший метод, который я мог бы использовать, или я застрял, пока Google не предоставит лучшие средства в будущей версии своего API?

Исходная информация Я пишу приложение GAE и знаю интерфейс google.appengine.api.files. К сожалению, это не работает с живыми корзинами при использовании локальной среды разработки, и для целей тестирования моей команде и мне нужен способ тестирования разработки локально (слишком громоздко для развертывания в GAE среди других ограничивающих факторов/факторов безопасности). Мы можем взаимодействовать со всеми другими API, кроме Cloud Storage, поэтому я пишу класс, который будет использовать либо JSON API, либо интерфейс файлов AppEngine при чтении/записи/удалении из Cloud Storage. У меня есть работающая реализация, но я недоволен тем, как я извлекаю файлы.

Пояснение из комментария ниже: мы загружаем большие объемы информации, обрабатываем ее и сохраняем в облачном хранилище для использования в BigQuery. Нам нужно использовать активные сегменты из среды разработки, потому что, если мы этого не сделаем, BigQuery не сможет использовать данные, которые мы хотим протестировать. Не нужно обслуживать эти файлы, просто обработайте их

Решение из комментария к принятому ответу ниже: мне удалось повторно использовать мой аутентифицированный объект httplib2 из моего кода, который взаимодействует с JSON API, чтобы выполнить аутентифицированный запрос GET к конечной точке URL-адреса https://{bucket_name}.storage.googleapis.com/{object_name}, добавив только Content-Length: 0 и x-goog-api-version: 2 заголовки.


person someone1    schedule 24.01.2013    source источник
comment
Из вопроса непонятно, используете ли вы GAE или нет? Если это так, есть несколько альтернатив в зависимости от вашего варианта использования.   -  person Sebastian Kreft    schedule 24.01.2013
comment
Прошу прощения, добавил справочную информацию   -  person someone1    schedule 25.01.2013
comment
Каков ваш вариант использования? Вам нужно обслуживать файлы или читать их и обрабатывать? Кроме того, зачем вам доступ к активным корзинам из вашей среды разработки?   -  person Sebastian Kreft    schedule 25.01.2013
comment
Мы загружаем большие объемы информации, обрабатываем ее и сохраняем в облачном хранилище для использования в BigQuery. Нам нужно использовать активные сегменты из среды разработки, потому что, если мы этого не сделаем, BigQuery не сможет использовать данные, которые мы хотим протестировать. Не нужно обслуживать эти файлы, просто обработайте их.   -  person someone1    schedule 25.01.2013


Ответы (1)


Для загрузки XML API — это самый простой способ выполнить загрузку с проверкой подлинности. Существует несколько способов загрузки с проверкой подлинности, как описано на этой странице: https://developers.google.com/storage/docs/authentication

Для простой операции выборки название «XML API» может вводить в заблуждение — вам не нужно создавать какой-либо XML. Если вы столкнетесь с ошибкой, она будет представлена ​​в виде XML, но в простейшем случае успешной загрузки файла XML фактически не используется.

person Benson    schedule 24.01.2013
comment
Я бы предпочел использовать JSON API. Я использую его для связи с рядом других API Google, поэтому большая часть кода уже написана и легко переносима для взаимодействия с ним. Существует также встроенная библиотека, которая выполняет аутентификацию в Google для меня (AppAssertionCredentials) в рабочей среде. Создание удобного для GAE способа взаимодействия с API XML и управление им было бы несколько громоздким. - person someone1; 25.01.2013
comment
Справедливо. Позвольте мне провести небольшое исследование. - person Benson; 25.01.2013
comment
В идеале я хотел бы, чтобы он работал как Drive API. Когда я получаю список файлов или конкретный файл, я получаю URL-адреса загрузки/экспортные ссылки, которые я могу выполнять с проверкой подлинности вызовов GET для загрузки ресурса. У меня уже есть токен oauth2... возможно, я смогу повторно использовать этот токен с XML API и пропинговать шлюз с информацией о корзине/объекте, чтобы получить данные... Возможно, я нашел свой ответ: developers.google.com/storage/docs/reference-methods#getobject - person someone1; 25.01.2013
comment
Да, это то, что я предлагал. Если у вас есть токен oauth2, вы сможете просто выполнить обычный старый GET с соответствующим заголовком oauth2. Это то, что мы называем XML API, потому что другие элементы этого семейства URL-адресов принимают или возвращают XML. - person Benson; 25.01.2013
comment
Я волновался, что мне придется начать создавать/использовать XML, поэтому я не рассмотрел API, мои извинения. Мне удалось повторно использовать мой аутентифицированный объект httplib2 из моего кода, который взаимодействует с JSON API, чтобы выполнить аутентифицированный запрос GET к конечной точке URL-адреса https://{bucket_name}.storage.googleapis.com/{object_name}, добавив только заголовки Content-Length: 0 и x-goog-api-version: 2. Огромное спасибо :)! - person someone1; 25.01.2013
comment
Рад помочь! Я поговорю с командой о возможной путанице, когда мы будем рекомендовать XML API для такого рода вещей — ваше беспокойство имеет смысл, и кажется, что мы могли бы лучше объяснить это в нашей документации. - person Benson; 25.01.2013