WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:画像ファイルアップロード後の表示更新について

0:[投稿] ぽむぽむ [2003/11/25 16:51 ][環境:IE6,NT2000 IE6,NT2000]

初めて投稿します。

画像ファイルのアップロードを行います。
まず既存のファイルを削除してから、同じ名前で保存をしています。
アップロードは正常に行われているのですが、再び画像を表示している画面へ遷移すると、以前の画像がそのまま表示されます。
何か良い方法はないでしょうか?
おそらく、画像のキャッシュ制御をしなければいけないと思いますが、何か良い方法はないでしょうか?

以前、同じ内容で投稿された方は別ファイル名を指定することで回避されたようですが、
今回はそうもいかないので、何か良いお知恵をお貸しください。


1:[回答] やちまた [2003/11/25 17:24 ]

画面の初期処理にて、javascript で日付日時を取得し、画像ファイルの uri の後ろに付加します。
そうする事でリクエストが刻々と変わっていくので、キャッシュから取得しなくなります。

イメージ的には以下のような感じです。

<img src="test.jpg?date=20031124180000">


2:[回答] Boo [2003/11/25 18:10 ]

私の場合は、head部に
<meta http-equiv="Expires" content="-1">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Pragma" content="no-cache">
の3行を記述することによって「キャッシュしない、させない、使わない」をしています。
画像にも効果があるかどうかは未確認です。


3:[回答] AC [2003/11/25 23:12 ]

この場合は、画像をキャッシュすることが問題なのではなくて、
UserAgentが画像をサーバに取得しに行かないのが問題。
UserAgentがIf-Modified-Sinceを使って画像を取得しようとしたとき、
画像が更新されていないので304 Not Modifiedを返されて
UAの持つキャッシュを使って表示するのは問題ない。

UAにサーバに強制的に取りに行かせるには、
Cache-Control: must-revalidate
を使う。HTTP1.1未対応UAのために、
Expires: (現在時刻)
も出しておく方がいいだろう。

サーバがNT2000(NT4?W2k?)とWindows系らしいので、IISを使っていると
仮定する。
IISでは、ファイルごととか、ディレクトリごとのプロパティでHTTPヘッダを指示できるので、
それを使ってCache-Controlを出せるし、Expiresは、有効期限の設定を
いじればよい。


4:[関連] ぽむぽむ [2003/11/26 16:30 ]

すいません、私の質問の仕方がわかりずらくて・・・
ソースとしてはこんな感じです。

// アップロード
function Upload()
{
   strURL = "../Up/Up001.asp?PageFile=photoUpload";
   var ret = window.showModalDialog(strURL, window, "status:no;resizable:on");//モーダルの別画面でアップロードして戻ってきます。

//retは表示する画面のフルパスです。
   if ( ret != "" )
   {
       document.MyForm0.IphotoFile.src = ret;←ここで再表示のはずが・・・
       document.MyForm0.Command.value = "reset";
       document.MyForm0.submit;
   }
   return;
}

ということで、開きっぱなしの画面の画像を表示しなおすことができなくて困ってます。

現在、回答を頂いたお三方の方法を試し中です。
ありがとうございます。


5:[回答] ・・・ [2003/11/26 17:10 ]

>document.MyForm0.submit;
      submit は関数なので、
document.MyForm0.submit();
でないと動かないよ・・・


6:[回答] ぽむぽむ [2003/11/26 17:49 ]

・・・さんへ
すいません。書き損じです。
実際のソース上では()付けてます。

function Upload()
{
  strURL = "../Up/Up001.asp?PageFile=photoUpload";
  var ret = window.showModalDialog(strURL, window, "status:no;resizable:on");
  if ( ret != "" )
  {
      document.MyForm0.IphotoFile.src = ret;
      document.MyForm0.Command.value = "reset";
      document.MyForm0.submit();
  }
  return;
}
一応"()"をつけた状態で実行させてますが、うまくいきません。


7:[回答] ・・・ [2003/11/27 09:27 ]

確認
IphotoFile は <input type="image" > ですか?

単なる<img src="・・・"> での画像ファイルだと、フォームの部品(部品という言い方が正しいかは??だけど)ではないので、
document.MyForm0.IphotoFile.src  では指定できないと思われます


8:[回答] ・・・ [2003/11/27 09:48 ]

img の場合は
document.IphotoFile.src  で指定します。
formの部品ではないので、formのname属性の部分は不要。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World