2011-09-09 22 views
2

少なくとも私にとっては奇妙なものです。私はCFイメージ変数に画像を読み取り、セッション変数として保存しています:新しいcfimageでセッション変数がリフレッシュされない

<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のドキュメンテーションはこれについて何も言及しておらず、Googleは何も持ち出さなかった。

思考?

答えて

3

問題はおそらくクライアント側です。あなたのimgタグのURLは変更されないので(... displayPhoto.cfm)、ブラウザはあなたが実際に新しいイメージを指しているのを見ないので、すでにキャッシュに入っているイメージを提供し続けます。

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

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

あなたは乱数ジェネレータまたはタイムスタンプ発生器からaUniqueValue変数を作成することができます。

+0

パーフェクト、感謝君は!!! – earachefl

+0

これはFFとChromeでは完全に機能するがIE 8では完全に機能しないと付け加えたいと思っていました。「 "を使用して、イメージのキャッシュを停止します。 。 – earachefl

+0

実際には、このリソースが見つかりました:http://blogs.msdn.com/b/ieinternals/archive/2009/07/20/using-post_2d00_check-and-pre_2d00_check-cache-directives.aspx -check = 0、pre-check = 0 "を私のコードから削除します。 – earachefl

2

displayPhoto.cfmのHTTPヘッダーを設定して、ブラウザーにコンテンツフォームのURLをキャッシュしないように設定することもできます。理論的には、ブラウザが少し異なるURLが与えられるたびに、ブラウザがキャッシュにイメージを保持するので、これはより良いかもしれません。これはおそらく、キャッシュが大きくサイトでは分割されていないデスクトップ上では現実世界の問題ではありませんが、キャッシュが限られているモバイルクライアントは、キャッシュしたい他のコンテンツを消去する可能性があります。

画像が大きい場合や、同じバージョンをたくさんロードされますする可能性がある場合は、HTTPヘッダを見て、そうでない場合は上記のアプローチは結構です(私たちは、私が上で動作するアプリの両方を使用)

+0

ニース。私はヘッダーを微調整することを忘れていました。 –

+0

はい、IE8で必要なヘッダーが調整されています。 – earachefl

関連する問題