записать изображение в 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, чтобы загрузить изображение в хранилище BLOB-объектов.

Вот фрагмент из демонстрации< /а>:

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
Поэтому запишите файл в gcs, затем вызовите blobstore.create_gs_key (который создает ключ большого двоичного объекта, из которого вы должны иметь возможность обслуживать изображение). Я не уверен, с чем связана функция удаления. - person Rob Curtis; 23.08.2013