Отправка изображений в облачное хранилище Google с помощью Google App Engine - PullRequest
2 голосов
/ 11 февраля 2012

Я написал простое веб-приложение с использованием google app engine на python, которое позволяет пользователям загружать изображения и хранить их где-то (сейчас я просто использую хранилище BLOB-объектов на основе учебных пособий).хочу отправить изображения в облачное хранилище Google, но не знаю, как это сделать.Они предоставляют два режима при открытии файла: «a» и «r».Ни один из них, насколько мне известно, не предназначен для двоичных потоков.

Как я могу отправить изображение в облачное хранилище Google?Фрагменты кода или ссылки были бы хорошими.Я планирую также отправить небольшие аудиосэмплы и другие двоичные данные.

Кроме того, как я могу удалить изображение, если пользователь желает удалить его?Похоже, что метод удаления недоступен.

Ответы [ 2 ]

4 голосов
/ 11 февраля 2012

Вот простой обработчик загрузки, который запишет большой двоичный объект, который был загружен в bigstore.Обратите внимание, что вам нужно добавить учетную запись службы вашего приложения в учетную запись группы, которая управляет корзиной BigStore.

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
  def post(self):
    upload_files = self.get_uploads('file')
    blob_info = upload_files[0]
    in_file_name = files.blobstore.get_file_name(blob_info.key())
    infile = files.open(in_file_name)
    out_file_name = '/gs/mybucket/' + blob_info.filename
    outfile = files.gs.create(out_file_name,
                              mime_type = blob_info.content_type)

    f = files.open(outfile, 'a')
    chunkSize = 1024 * 1024
    try:
      data = infile.read(chunkSize)
      while data:
        f.write(data)
        data = infile.read(chunkSize)
    finally:
      infile.close()
      f.close()

    files.finalize(outfile)
2 голосов
/ 11 февраля 2012

Нет разницы между двоичным потоком и текстовым потоком в облачном хранилище.Вы просто записываете строки (или байтовые строки) в файл, открытый в режиме "a".Следуйте инструкциям здесь .

Кроме того, если вы обслуживаете изображения из интернет-магазина, вам, вероятно, лучше использовать get_serving_url() из здесь , хотя это зависит отваше заявление.

...