2017-09-11 7 views
2

現在、ユーザーがアップロードしたプロフィール写真は、/ static/avatars/{upload-date}に保存されます。次に、データベースに格納されている情報を使用して画像のStaticRルートを生成します(実行時に追加され、StaticRルートはまだ存在しません)。Yesod - ユーザープロフィール画像を静的ディレクトリに保存する必要がありますか?

私が遭遇した問題は、ユーザーがプロフィール写真を更新したときに、静的なファイルがキャッシュされているために古いものが残ってしまうことです。これを回避する方法はありますか、それとも別の場所に画像を保存する必要がありますか?もしそうなら、どうすれば/avatars/{upload-date}/{userid}.pngから画像にアクセスするのですか?

私は/ avatars /#Day /#UserIdの行に沿ってルートを作成することができますが、私はそれに ".png"または ".jpg"をどのように追加するか分かりません。または、私がハンドラ関数のために書いているもの。

+0

ここまでファイル保存を行っているコードは何ですか?私はそれを見ていると役に立つかもしれないと思う。 – AJFarmar

+0

@AJFarmarファイルの保存はいくつかの機能に広がっていますが、あなたが見たい/役に立つと思う特定の部分はありますか?あなたが望むなら、私はそれらのすべてを置くことができますが、私は最初に尋ねると思った。 –

答えて

2

私はの/アバター/#日/#ユーザーID線に沿ってルートを作成することができます知っているが、私は、私は「.PNG」または「.JPG」

番目に付加なるだろうかどうかはわかりません

あなたのURLがpngまたはjpegの内線になる必要はありません。コンテンツタイプヘッダが正しく設定されていることを確認するだけです。

または、私はハンドラ関数用に書いています。

これは非常に簡単です。あなたがpng画像を提供している場合は、あなたがしなければならないすべては、それらを提供するための機能sendFiletypePngを使用している:

myAvatarHandler = sendFile typePng "/home/yesod/static/avatars/day/userid.png" 

また、あなたの例では、アップロードのタイムスタンプを保存し、に従って、あなたのURLを変更してくださいそれ。または、同じ日に更新された2つのプロフィール画像がキャッシュされます。

+0

返事をありがとう。私はハンドラ関数の使い方について少し混乱しています。私はイメージタグのソースとしてそれを使用したいとき。アバター用の新しいルートを作成する必要がありますか?あなたの答えでは、パスが静的であることが示されました.StaticRを使用して静的に画像を提供する方法はすでにありましたが、問題は、ユーザーが新しい画像をアップロードしたときにキャッシュされていたということでしたファイルシステムのファイルが更新されても、あなたの答えは同じ問題を抱えていませんか? –

+0

@JamesBurton私の答えに示されているように、私はあなたに画像のタイムスタンプ(日の部分)を保存することをお勧めします。そうすれば、画像のアップロードに一意のURLを取得することが保証されます。 – Sibi

+0

さて、以前のようにStaticRルートを生成するのではなく、あなたの答えにハンドラを追加する必要があるのでしょうか? –

関連する問題