2017-11-22 12 views
0

アプリケーションでは、ブロブストアとクラウドストレージの両方にファイルをアップロードしています。私はこれでアップロードのリンクを生成することによって、これをやっているクラウドストレージとBlobstoreに保存されているファイルのファイル名を取得する方法は?

upload_url = blobstore.create_upload_url('/upload', gs_bucket_name=app_identity.get_default_gcs_bucket_name()) 

ファイルは、両方のブロブストアとクラウドストレージに保存されている、と私はブロブストアから必要なファイルを取得するために、GQLクエリを実行することができます。しかし、私はクラウドストレージでファイル名を取得する方法を見つけることができません。

ファイルをクラウドストレージにアップロードすると、自動的に長いファイル名が割り当てられます。

私は、コマンドを見つけたが、私はこれを使用するかどうかはわかりません。私が試したときhttps://cloud.google.com/appengine/docs/standard/python/refdocs/google.appengine.ext.blobstore.blobstore#google.appengine.ext.blobstore.blobstore.BlobInfo

を:

cloud_store = [] 
for upload in uploads: 
    gcs_link = blobstore.BlobInfo(db.get(upload)).gs_object_name 
    cloud_store.append(gcs_link) 

ここuploads店がblobstore.BlobReferenceProperty()を持っている種類に行っGQLクエリの結果プロパティ。

BadArgumentError: Expected an instance or iterable of (<type 'basestring'>, <class 'google.appengine.api.datastore.Entity'>, <class 'google.appengine.api.datastore_types.Key'>); received <models.PhotoAlbum object at 0x00000000054CD7B8> (a PhotoAlbum). 

私が試した:uploads以来

TypeError: Must provide Entity or BlobKey 

答えて

1

はそれを意味し、データストアクエリの結果である:

cloud_store = [] 
for upload in uploads: 
    gcs_link = blobstore.BlobInfo(upload.key()).gs_object_name 
    cloud_store.append(gcs_link) 

私はこのエラーを取得する

は、私はこのエラーを取得しますデータストアのエンティティのリストが含まれています(keys_onlyクエリではないと仮定します)。だからuploadblobstore.BlobReferenceProperty()プロパティを含むエンティティの1つです(名前を指定していないので、blob_keyとします)。

blobstore.BlobInfo()に渡す必要があるのは、BLOBキー、つまりuploadのデータストアのエンティティプロパティで、エンティティ自体のキーではありません。だから私は(プロパティ名についての上記の仮定で)しようとしています:

gcs_link = blobstore.BlobInfo(upload.blob_key).gs_object_name 
+0

それは私にエラーを与える: 'TypeError:エンティティまたはBlobKeyを提供する必要があります。しかし、私は解決策を見つけました: 'gcs_link = blobstore.BlobInfo(upload.blob_key.key()).gs_object_name' – Beginner

関連する問題