2012-02-11 83 views
2

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

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

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

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

回答

4

下面是一个简单的上传处理程序,它将写入上传到bigstore的blob。请注意,您需要将应用的服务帐户添加到管理大型存储分区的团队帐户。

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) 
+0

感谢您的摘录。如果我使用这种方法,我还会使用blobstore吗? – MxyL 2012-02-11 18:45:07

+0

是的,在这个例子中,上传进入blobstore 1st。 – 2012-02-12 08:07:14

2

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

此外,如果您正在从blobstore提供图片,那么最好使用get_serving_url()here,尽管这取决于您的应用程序。