2017-02-12 2 views
0

Я делаю приложение, в котором пользователи могут загружать некоторые фотографии, чтобы другие могли их видеть. Поскольку некоторые из них могут быть немного большими, мне нужно создать меньшие изображения, чтобы дать предварительный просмотр содержимого.Как создать эскизы в GAE с помощью GCS вместо Blobstore?

У меня уже есть загруженные изображения в ГКС, в адресах с формой: «https://storage.googleapis.com/ ...», но от того, что я могу видеть в Images API docs, он использует blobstore, который я не использую (это был заменен). Как я могу обслуживать эскизы из ссылки gcs, чтобы избежать загрузки пользователем полного изображения? Я был бы очень признателен за любой пример кода.

UPDATE:

Я попытался скопировать пример с image из моего приложения, используя images.Image с именем файла, как предложено, но это дает мне TransformationError, и NotImageError, если я не попробовать какие-либо преобразования:

def get(self): 

    teststr ='/gs/staging.trn-test2.appspot.com/TestContainer/Barcos-2017-02-12-145657.jpg' 
    img = images.Image(filename=teststr) 

    img.resize(width=80, height=100) 
    thumbnail = img.execute_transforms(output_encoding=images.JPEG) 
    self.response.headers['Content-Type'] = 'image/jpeg' 
    self.response.out.write(thumbnail) 

Что мне не хватает?

+0

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

+0

Как вы можете видеть в моем посте (ссылка на изображение) изображение есть, и оно отображается без каких-либо проблем. Вот ссылка еще раз: https://storage.googleapis.com/staging.trn-test2.appspot.com/TestContainer/Barcos-2017-02-12-145657.jpg, поэтому я не думаю, что она отсутствует или повреждена. Что еще это может быть? –

ответ

1

В общем, вы можете использовать API Blobstore, но с GCS в качестве основного хранилища вместо Blobstore, см. Using the Blobstore API with Google Cloud Storage. ИМХО просто хранение вытесняется, а не сам API:

Примечание: Вы должны рассмотреть возможность использования Google Cloud Storage, а не Blobstore для хранения данных BLOB.

Для Image класса в частности (от вашей ссылки), вы можете использовать filename дополнительный аргумент конструктора вместо blob_key один (который вызывает вышеупомянутый Blobstore API + использование ГКСА под капотом):

filename: String of the the file name of a Google Storage file that 
      contains the image data. Must be in the format 
      `/gs/bucket_name/object_name`. 

Со своей __init__() функции:

if filename: 
    self._blob_key = blobstore.create_gs_key(filename) 
else: 
    self._blob_key = _extract_blob_key(blob_key) 
+0

Я думал, что это совсем не нужно, но я думаю, хорошо, что я все еще могу использовать этот API. У меня все еще есть ошибка, пытаясь использовать ее, как вы только что сказали, я обновлю вопрос. –

Смежные вопросы