私は最近google-cloud client の使用を開始し、この小さな例を作成しました (わかりやすくするために省略/変更しました):
<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)
このコードは 32 MB 未満であれば問題なく動作しますが、大きなファイルは GCS に直接ではなくアプリを経由するため、処理できません。Blobstore API を使用したソリューションを見たことがありますが、それらは古く、Blobstore はデータを保存するためにも使用されていません (ただし、Blobstore API は引き続き使用できます)。
google-cloud クライアントを使用してこれを修正する方法はありますか? docsでアップロード URL を作成する方法を見たことがありません。