запис на изображение в blobstore от url

Този въпрос е подобен на Как да кача изображение от url в Blobstore?, но сега google.appengine.api.files е отхвърлен.

Това, което имам, е уеб формуляр, в който потребителят вмъква URL адрес и изображението трябва да бъде качено в blobstore. След това от страна на сървъра извличам URL адреса, за да получа данните за изображението и създавам google.appengine.api.files.

Възможно ли е да го направя без google.appengine.api.files? Бих искал да го запазя просто, както в случая, когато потребителят изпрати изображение и сървърът използва blobstore_handlers.BlobstoreUploadHandler

Може би мога да направя нещо от страна на клиента, за да извлека изображението на клиента и след това да използвам същия подход с blobstore_handlers.BlobstoreUploadHandler?


person Ruggero Turra    schedule 23.08.2013    source източник


Отговори (1)


Ще трябва да използвате urlfetch (или urllib2), за да извлечете изображението (от страната на сървъра, въз основа на предадения url).

След това можете да използвате gcs клиент, за да качите изображението в blobstore.

Ето фрагмент от демото:

def create_file(self, filename):
    """Create a file.
    The retry_params specified in the open call will override the default
    retry params for this particular file handle.

    Args:
      filename: filename.
    """
    self.response.write('Creating file %s\n' % filename)

    write_retry_params = gcs.RetryParams(backoff_factor=1.1)
    gcs_file = gcs.open(filename,
                'w',
                content_type='text/plain',
                options={'x-goog-meta-foo': 'foo',
                         'x-goog-meta-bar': 'bar'},
                retry_params=write_retry_params)
    gcs_file.write('abcde\n')
    gcs_file.write('f'*1024*1024 + '\n')
    gcs_file.close()
    self.tmp_filenames_to_clean_up.append(filename)
person Rob Curtis    schedule 23.08.2013
comment
благодаря ви, но както казах, бих искал да е просто, така че без gcs, а само blobstore. Всъщност съм объркан относно разликата. - person Ruggero Turra; 23.08.2013
comment
Съгласен съм, объркващо е, че GAE започна да използва различни подходи. Можете да създадете blob_key от gcs файла, като извикате create_gs_key developers.google. com/appengine/docs/python/blobstore/ - person Rob Curtis; 23.08.2013
comment
Затова напишете файла в gcs, след което извикайте blobstore.create_gs_key (което създава blob ключа, от който трябва да можете да обслужвате изображението). Не съм сигурен къде е свързана функцията за изтриване. - person Rob Curtis; 23.08.2013