2

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

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

如何将图像发送到谷歌云存储?代码片段或引用会很好。我也计划发送小型音频样本和其他二进制数据。

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

4

2 回答 2

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)
于 2012-02-11T08:23:03.673 回答
2

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

此外,如果您从 blobstore 提供图像,则最好使用get_serving_url()from here,尽管这取决于您的应用程序。

于 2012-02-11T07:29:44.510 回答