2

少なくとも私にとっては、これは奇妙なことです。画像をcf画像変数に読み込んで、セッション変数として保存しています。

<cfimage action="read" source="myPath/image.jpg" name="myImage" />
<cfset session.image = #myImage# />

ある時点でその画像を操作する予定です。そのため、画像を変数に保存しています。とにかく、それから私はそれをcfcontentでストリーミングします:

<img id="photoPlaceholder" src="/#application.root_name#/administration/PhotoManagement/displayPhoto.cfm" width="500px" />

テンプレートdisplayPhoto.cfmから:

<cfcontent  variable="#imageGetBlob(session.image)#" />

ここに問題があります。最初の呼び出しの後、どの新しい画像が渡されても、最初に取得された画像が表示されます。cfimageタグの前にセッション変数を破棄しようとしましたが、毎回正しい画像変数を渡していることを確認しました。新しい画像が表示される唯一の方法は、ページを更新する場合です。

cfimageはどういうわけか画像をキャッシュしているように見えますが、画像を新たに呼び出すたびに変数myImageが更新されることはありません。CFのドキュメントにはこれについて何も書かれておらず、グーグルは何も提起していません。

考え?

4

2 に答える 2

3

あなたの問題はおそらくクライアント側です。imgタグのURLは変更されないため(... displayPhoto.cfm)、ブラウザは実際に新しい画像を指していることを認識せず、すでにキャッシュにある画像を提供し続けます。

ランダム化された偽のパラメータをsrc属性の最後に追加してみてください。これは、次の擬似コードのようなものです。

<img id="photoPlaceholder" src="/#application.root_name#/administration/PhotoManagement/displayPhoto.cfm?somevar=#aUniqueValue#" width="500px" />

乱数ジェネレーターまたはタイムスタンプジェネレーターからaUniqueValue変数を作成できます。

于 2011-09-09T17:33:54.143 に答える
2

また、displayPhoto.cfmでHTTPヘッダーを設定して、そのURLからコンテンツをキャッシュしないようにブラウザーに指示することもできます。理論的には、これはより良いかもしれません。そうしないと、ブラウザはわずかに異なるURLが与えられるたびに画像をキャッシュに保持します。これは、キャッシュが大きく、サイトごとにセグメント化されていないデスクトップではおそらく現実的な問題ではありませんが、キャッシュが制限されているモバイルクライアントは、キャッシュしたい他のコンテンツを削除する可能性があります。

画像が大きい場合、または同じバージョンが大量に読み込まれる可能性がある場合は、HTTPヘッダーを確認してください。そうでない場合は、上記のアプローチで問題ありません(私が取り組んでいるアプリでは両方を使用しています)

于 2011-09-09T19:47:29.090 に答える