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

相關問題