2011-12-14 13 views
2

ユーザーがAppEngine WebアプリケーションにHTMLコンテンツをアップロードできるようにしたいと考えています。しかし、Blobstoreを使用してすべてのファイル(HTMLファイル、CSSファイル、画像など)をアップロードしている場合、他のファイル(ページ、リソース)へのリンクがすべて機能しないため、問題が発生します。AppEngineアプリケーションへのHTMLコンテンツのアップロードを処理する方法は?

私は二つの可能性を見たが、それらの両方が非常にきれいではないと私はそれらを使用しないようしたいと思います:HTMLファイル内のすべてのリンクの上に

  • 移動し、関連するblobキーにそれらを変更。

  • (同じ名前のファイルに問題を引き起こす可能性があります)、ファイルやblobキーの間のマッピングを保存し、すべてのリダイレクションをキャッチし、ブロブを果たします。

私のユーザーのファイルを変更しなくても、これをエレガントに解決できますか?

+1

これ以上の洗練されたソリューションはないと思います。 htmlにはリソース(css/imageなど)の正しいパスが含まれている必要があるためです。ユーザーのケースが何であるかをもっと説明できますか?ユーザーができる必要がありますか?私の頭の上で、私はそれの周りにHTMLフレームワークを作成し、ユーザーにcss/jsを特別なテキストエリアで指定させ、テキストストアとしてデータストアに保存させます。また、画像用のブロブストアを使用します。 – fredrik

+0

@fredrik私のサイトは一種のコンテンツポータルになり、ユーザーはインタラクティブなHTMLコンテンツ(ゲームなど)をアップロードします。私は自分のコンテンツを構築するときにユーザーにルールを強制したくないだけでなく、アップロードしたコンテンツを混乱させたくない... – Fastas

答えて

0

ここでマッピングを保存するのが最適です。複数のユーザーが同じ名前のファイルをアップロードし、そのグループ内の各ファイルに一意のパス名を関連付けることができるため、ファイルのグループを何らかの方法で識別する必要があります。キー名を使用すると、シンプルなデータストアを使用して、特定のパスに関連付けられたBLOBを見つけることができます。リダイレクトは必要ありません.Blobstoreヘッダーを設定してApp Engineにblobをユーザーに提供させる標準的なBlobstoreのサービス方法を使用してください。

Frederikが示唆しているように、もう1つの選択肢は、zipをアップロードすることです。ファイルを個別に解凍して保存する必要はありませんが、this demo appのように、ブロブストアのzipから直接ファイルを提供することができます。

1

アプリエンジンが複数のサーバーでコンテンツを実行しているため、ファイルシステムに書き込むことができません。あなたができることは、html、css、js、images ...を含むzipファイルをアップロードするように要求することです。pythonのzipfileモジュールはappengineで利用できるため、これらのファイルを解凍して個別に保存することができます。この方法で、あなたはzipのディレクトリ構造を知ることができます。これにより、ブロブストア内のコンテンツへの相対パスのマッピングを作成することができます。完全な例を書くためにzipfileの経験が足りません。経験豊富な人が自分の答えを編集したり、例を使って新しいものを作成したりすることを願っています。

関連する問題