1

サイトを IIS から GAE に移行していて、大量の画像をバッチ アップロードしようとしています。その特定の課題に加えて、私にはもっと関心のある課題があります。サイトのすべてのコンテンツ (DB に格納されている) は、次のように画像を参照します。

http://myurl.com/images/some-folder/maybe-another-folder/image-name.jpg

画像を提供するために Python で単純なハンドラーを作成しました。

class ServeBlobs(blobstore_handlers.BlobstoreDownloadHandler):    
  def get(self, resource):        
      query = "where filename='%s'" % resource        
      blobs = blobstore.BlobInfo.gql(query).fetch(1)        
      self.send_blob(blob_infos[0])

そして「ルート」は次のとおりです

('/images/(.*)', ServeBlobs)

これはうまく機能し、別のルックアップ テーブルは必要ありません。ただし、hte Blob のファイル名プロパティに「/」を含めることはできないと確信しているので、上記の例で some-folder または Maybe-another-folder と呼ばれるフォルダー (多数ある) についてはどうすればよいでしょうか?

さらに、異なるフォルダー内の画像名にはほぼ確実に重複があります。

"/images/foldera/main.jpg"
and
"/images/folderb/main.jpg"

何か案は?

4

2 に答える 2

2

アップロードフォームでファイルへの完全なパスを追加フィールドとして指定し、アップロードファイル名を完全に無視するか、指定されたパスに追加する必要があります。

BlobReferenceProperty次に、フルパスをキー名として、blobを参照するデータストアモデルを作成する必要があります。このようにして、より高価なクエリの代わりに単純なデータストアgetを介してblobを検索でき、さらにエンティティに対する関連情報(ヘッダー情報など)を格納できます。

于 2011-04-15T03:52:07.823 に答える
1

直接的な答えではありませんが、より推奨事項:

アプリケーション内で可能な場合は、すべての動的画像を移行して、ブロブストアのget_serving_urlメソッドを使用することをお勧めします。BLOB を手動で提供するハンドラーを用意するのではなく。これは、画像を提供するためのはるかに効率的なシステムであり、組み込みのサイズ変更にアクセスする将来の柔軟性を提供します。

これには、移行が多少複雑になる必要がありますが、長期的にははるかに優れていると思います.

  • 現在行っているように、各画像をブロブストアに POSTし、画像ブロブの提供 URLを取得する必要があります。
  • 移行中にold-urls => new-serving-urlsのローカル マップを保持する
  • アプリケーション/データ内のすべての古い URL新しいサービス提供URL に更新します

以前のバージョンのアプリで画像へのすべてのリンクをどのように保存したかによって、これは些細なことであるかほぼ不可能である可能性がありますが、覚えておく価値があると思います。

于 2011-04-15T08:47:18.587 に答える