- PR -

INPUT TYPE=FILEタグでの入力値保持について

1
投稿者投稿内容
nsfj
会議室デビュー日: 2002/08/09
投稿数: 12
投稿日時: 2002-08-11 18:27
Web Formでファイルのアップロードをするため、
HTMLコントロールのFILEフィールドをサーバコントロールとして使用していますが、
他のフィールドでPostBackした時に入力されていたファイル名が保持されません。
調べてみるとHTMLコントロールでもTEXTフィールドは保持されます。
NGなのはFILEとPASSWORDフィールドだけのようです。
これはそもそもHTMLの仕様なのでしょうか?
ASP.NETの特長であるPostBackを使用する上で障害となるのですが
何か回避策はありませんか?

[ メッセージ編集済み 編集者: nsfj 編集日時 2002-08-11 18:29 ]
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-08-11 21:17
ブラウザの仕様では。
HTTP にも HTML にも「ブラウザで back したときの挙動」なんてのは
決められていないと思います。
nsfj
会議室デビュー日: 2002/08/09
投稿数: 12
投稿日時: 2002-08-12 09:49
しょむさん、ありがとうございます。
PostBackの問題というよりやはりHTMLの仕様のようです。
単純なHTMLでINPUT TYPE=FILEタグのVALUE属性に初期値をセットしても無視されるのです。
ASP.NETはこれを自動でやっているだけなのでVALUEが無視されては・・・。
「セキュリティ上の理由」らしいのですが困りました。
PostBackのある画面では使用を避けるしかないのでしょうか?
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2002-08-12 12:44
こんにちは。
HTMLの仕様ですから無理矢理それに反しようとせず、
別の視点で実装してみてはいかがでしょうか?

私も昨年のWEB開発の際にその問題に直面しました。
JavaScriptを使ってみたりと試行錯誤しましたが、
結局実現させることは出来ませんでした。
そこで思いついたのが、メッセージでその旨を伝えることです。
例えば、FILEフィールドに入力後ボタンで次の画面に遷移します。
その画面からボタンでFILEフィールドのある画面に戻る際、
「ファイル1(FILEフィールドの項目名)を再度入力してください。」
とメッセージボックス等で表示してあげるのです。

どうしても出来ないものに時間と力を注ぐより、
別のものでフォローすることもひとつの技術だと思いますがいかがでしょう?

※ちなみに「セキュリティ上の理由」なのは、入力したファイルパスやパスワードに
 値を保持させると、ブラウザの「ソースの表示」で見られるからではないでしょうか?
 私もその辺は良く知りませんが・・・。
 
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-08-12 12:50
javascript でも無理ですね。
まぁ、auto submit ができるわけですから、
たとえばページを開いたときにファイルシステム上の秘密のファイルを
自動送信なんていう危ないことができちゃうと困るわけで。

あきらめましょう。

# ActiveX とかで抜け道は…作れたら作れたでやっぱり問題かな…
# いあ、windowsupdate とかできるんだし何か抜け道がありそうな気がする…
biac
大ベテラン
会議室デビュー日: 2001/10/22
投稿数: 106
投稿日時: 2002-08-12 14:53
引用:

HTMLの仕様ですから無理矢理それに反しようとせず、


ちょっと補足。
すくなくとも W3C HTML 4.x の仕様ではありません。

http://www.w3.org/TR/html401/interact/forms.html#h-17.4.1 より
引用:

file
Creates a file select control. User agents may use the value of the value attribute as the initial file name.


ブラウザは、「value 属性の値をファイル名の初期値として 使っても良い (may use)」とあります。
しょむ さんが書かれたように、それでは JavaScript を使って勝手にファイルを送信されてしまいますから、ブラウザの実装としてセキュリティ面からそうしていない、と解釈すべきでしょう。 ("may" なので、実装しなくても規格には合っている。)
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2002-08-12 15:34
biac様

HTML仕様ではなかったのですね。失礼致しました。
#HTML仕様だと教えてくれた先輩にも違うと教え返します。

仕様では許可されているのに実装では許可されていないというのも
不思議なものですね・・・。

それでは。
nsfj
会議室デビュー日: 2002/08/09
投稿数: 12
投稿日時: 2002-08-12 16:29
biacさん、詳細な情報ありがとうございました。
HTMLの仕様だと思ってました。
ブラウザでの実装レベルでセキュリティを考慮したわけですね。
勉強になりました。
で、解決策の方もまゆりんさんのおっしゃる通り無理矢理なことはせず、
PostBackする画面とは別にする等実装で工夫したいと思います。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)