使用谷歌应用引擎将图像发送到谷歌云存储

时间:2012-02-11 04:11:34

标签: google-app-engine google-cloud-storage

我在python中使用谷歌应用引擎编写了一个简单的webapp,允许用户上传图像并将其存储在某处(现在我只是使用基于教程的blob存储)。

现在我想将图像发送到谷歌云存储,但我不知道如何做到这一点。它们在打开文件时提供两种模式:“a”和“r”。据我所知,它们都不是二进制流。

如何将图片发送到Google云端存储?代码片段或引用会很好。 我打算发送小音频样本和其他二进制数据。

另外,如果用户希望删除图像,如何删除图像?似乎没有可用的删除方法。

2 个答案:

答案 0 :(得分:4)

这是一个简单的上传处理程序,它将编写上传到bigstore的blob。请注意,您需要将应用的服务帐户添加到管理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)

答案 1 :(得分:2)

云存储中的二进制流和文本流之间没有区别。您只需将字符串(或字节字符串)写入以"a"模式打开的文件。按照here的说明进行操作。

另外,如果您从blobstore提供图片,最好使用here中的get_serving_url(),但这取决于您的应用。