2012-02-11 12 views
2

私は、ユーザーが画像をアップロードしてどこかに保存できるようにするGoogle Apps EngineをPythonで作成しました(今はチュートリアルに基づいてブロブストアを使用しています)。グーグルアプリエンジンを使用してGoogle Cloud Storageに画像を送信する

Googleのクラウドストレージに画像を送信したいが、これを行う方法がわからない。ファイルを開くときには、「a」と「r」の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) 
+0

スニペットありがとう。この方法を使用すると、私はまだブロブストアを使用していますか? – MxyL

+0

はい、この例ではアップロードがblobstore 1stに入ります。 –

2

クラウドストレージ内のバイナリストリームとテキストストリームには違いはありません。文字列(またはバイト文字列)を"a"モードで開いたファイルに書き込むだけです。 hereの指示に従ってください。

また、ブロブストアから画像を提供している場合は、get_serving_url()からhereを使用する方がよいでしょうが、これはアプリケーションによって異なります。

関連する問題