Google App Engine: чтение из облачного хранилища Google

У меня есть приложение Flex/Java в Google App Engine, и все, что я хочу, это загружать большие изображения из облачного хранилища Google с помощью URLRequest во Flex. Я уверен, что это просто, но я не могу заставить его работать. Я буду вручную загружать изображения с помощью консоли Google API, поэтому мне не нужно ничего писать в приложении. Изображения не могут быть общедоступными.

Я не уверен на 100%, как получить доступ к файлу, поэтому проблема может быть в этом. Я пробовал это:

  • "/gs/mybucket/myimage.jpg" : не найдено
  • "/mybucket/myimage.jpg" : не найдено
  • "http://commondatastorage.googleapis.com/mybucket/myimage.jpg" : отклонено

Я добавил [email protected] на вкладку Team в Google API Console с разрешением Может просматривать и использовал GSUtil для получения и настройки списков ACL для mybucket и myimage.jpg, чтобы добавить разрешение READ для [email protected], но это не помогло.

Что я делаю неправильно?


person user1394563    schedule 14.05.2012    source источник
comment
Вы говорите, что изображения не могут быть общедоступными — как тогда гибкое приложение получит к ним доступ?   -  person Nick Johnson    schedule 15.05.2012
comment
Приложение Flex должно иметь разрешение READ для них, но пока это работает не очень хорошо. Google Cloud Storage позволяет вам контролировать, кто может получить доступ к вашим файлам. В этом случае мне нужен только [email protected], но никто другой, чтобы иметь возможность читать файлы. Это описано здесь, я просто не вижу, что я пропустил: https://developers.google.com/storage/docs/accesscontrol   -  person user1394563    schedule 15.05.2012
comment
Если пользователь может загрузить гибкое приложение, а гибкое приложение должно иметь возможность загружать изображения, то ваши изображения являются общедоступными — от этого никуда не деться.   -  person Nick Johnson    schedule 16.05.2012
comment
Что ж, внутри приложения Flex есть защита паролем, которая не работает, если приложение не находится на сервере, поэтому я думаю, что это должно быть безопасно. Я просто не хотел, чтобы изображения были доступны с использованием их фактического URL-адреса, а изображения не индексировались в Google и т. Д.   -  person user1394563    schedule 17.05.2012
comment
Вы отправляете приложение пользователю — ему несложно определить, какие изображения и как извлекаются, или извлечь пароль из гибкого приложения. Почему вы хотите показывать изображения пользователю, пытаясь предотвратить их загрузку самостоятельно?   -  person Nick Johnson    schedule 17.05.2012
comment
Мы не говорим об одних и тех же пользователях! Идентифицированные пользователи с паролем могут просматривать или загружать изображения (из приложения), но никто другой не должен иметь такой возможности. Декомпилировав приложение Flex, все, что вы узнаете, это то, что приложение отправляет хешированные значения того, что было введено для входа на некоторый URL-адрес. Используя метод, предложенный ниже, приложение Flex может затем загружать изображения, используя значения, возвращенные сервером, если вход в систему был успешным. Эти значения даже не являются частью фактического местоположения изображений, и в любом случае их может видеть только [email protected]. Я не думаю, что это так тривиально получить доступ?   -  person user1394563    schedule 17.05.2012
comment
Ах. Нет, вы совершенно правы — вы можете, конечно, контролировать доступ ограниченной группы пользователей.   -  person Nick Johnson    schedule 18.05.2012


Ответы (2)


Я не совсем понимаю, как работает flex или как он пытается получить доступ к BLOB-объектам.

Однако, если вы хотите ответить на HTTP-запрос содержимым объекта Google Storage, вы можете использовать метод serve.

https://developers.google.com/appengine/docs/java/blobstore/overview#Serving_a_Blob

person Stuart Langley    schedule 14.05.2012
comment
Да, Flex выполняет базовый HTTP-запрос. Разве метод serve не специфичен для BlobStore? Google Cloud Storage дает мне путь к файлу, но я не знаю ключа, как в примере с вашей ссылкой? - person user1394563; 15.05.2012
comment
Используйте createGeBlobKey, чтобы создать ключ для файла хранилища Google. developers.google.com/appengine/docs/java/javadoc/com/google/ - person Stuart Langley; 16.05.2012
comment
Ооо! Вот об этом я не знал. Все заработало как волшебство с первой попытки! Большое спасибо! - person user1394563; 17.05.2012

Вы разрешаете вызов URLRequest с помощью токена OAuth? Если нет, то даже несмотря на то, что запрос инициирован из приложения ядра приложения, он будет выглядеть в Google Cloud Storage как общедоступное чтение без проверки подлинности. Я не знаю, есть ли у flex опция трассировки, но если есть способ изучить детали запроса, я бы проверил, правильно ли вы настраиваете аутентификацию.

Если окажется, что заставить flex работать с OAuth слишком сложно, вы также можете использовать подписанные URL-адреса (также известные как URL-адреса с проверкой подлинности строки запроса). Это дает вам возможность создать URL-адрес со специальной подписью, которая неявно передает вашу авторизацию, но только люди с этой ссылкой могут получить доступ к объекту. ACL объекта может быть настроен на запрет публичного доступа, но ваши подписанные URL-адреса смогут читать объект. Вы также можете ограничить время подписанных URL-адресов, если хотите. Здесь документация по использованию этого метода.

person Marc Cohen    schedule 19.05.2012