0

我最近开始使用google-cloud client,和我做了这个小例子(我省略/更改为清晰起见东西):如何使用google-cloud客户端将大于32MB的文件上传到GCS?

<form id="testform" method="post" enctype="multipart/form-data"> 
    <p> 
    <div> 
     <label for="fotos">Some file</label> 
    </div> 
    <div> 
     <input type="file" name="testfile"> 
    </div> 
    </p> 
    <input type="submit" value="Submit"> 
</form> 
from google.cloud import storage 

class MyHandler(BaseHandler): 
    def get(self): 
     self.render("test.html") 

    def post(self): 
     file = self.request.POST["testfile"] 
     filename = file.filename # + TimeStamp 

     bucket = storage.Client().get_bucket(self.get_bucket_name()) 
     blob = bucket.blob(filename) 

     blob.upload_from_string(data=file.file.read(), 
           content_type=file.type) 

     self.write(blob.public_url) 

此代码的工作只是在32MB东西很好,但它不能处理更大的文件,因为他们通过应用程序而不是直接到GCS。我已经看到solutions使用Blobstore API,但那些都是旧的,Blobstore甚至不用于存储数据(尽管Blobstore API仍然可以使用)。

所以我想知道,有没有办法解决这个使用谷歌云客户端?我还没有看到在docs中创建上传网址的方法。

回答

1

客户端应该直接上传到GCS。来自GAE的单个连接不能传输超过32 MB的数据。

这对你来说应该不是问题,因为你已经在使用HTML表单了。 https://cloud.google.com/storage/docs/xml-api/post-object

根据您的应用所需的访问权限,您可能需要公开访问该存储桶。否则,您必须在后台生成的PUT请求中指定GoogleAccessId,并且事先发送到前端。

上面链接的页面末尾有一个小表单上传示例。

最后,我个人推荐使用AJAX上传您的文件使用REST API https://cloud.google.com/storage/docs/json_api/v1/how-tos/upload这将帮助您处理错误,重定向和成功更容易。

+0

JSON API听起来像是一个很好的解决方案。所以我想我并不需要那个google-cloud客户端。谢谢。 –

+0

嗨,豪尔赫,你能指出我如何使用JSON API通过ajax上传文件的方向。我整天都在阅读文档,但还没有找到具体的例子。我只需要朝正确的方向轻推。干杯 – Chez

相关问题