プロが教える店舗&オフィスのセキュリティ対策術

こんにちは
<input type="file">について、以下の点お教えください。

ソースで<input type="file" name="test" maxlength="10">
とした場合に、コピー&ペーストでは、例えば20byte文字列を貼り付けると10byteまでしかボックスには反映されないのですが、
その後直接手入力ができます。
また、ボタンからダイアログを起動してパスを指定した場合も、maxlength以上の桁数がセットされます。
ソースの書き方が悪いのでしょうか?
それとも手入力文字数やダイアログからの桁数の制限をかけられないという仕様(HTML?IE?)なのでしょうか?

また、ダイアログからパスを指定した場合、このパスが255byte以上(254byteはOK)だと、
パス内容がボックスに反映されないのですが、
これもまた仕様なのでしょうか?
(ファイル名の最長桁数が256byteだと思うと問題があるような気がするのですけども)

※私のマシンはWinXPでIE6のSP2を使用しています。

以上の点について、何か情報をお持ちの方は回答お願いします!!

A 回答 (5件)

> (ファイル名の最長桁数が256byteだと思うと問題があるような気がするのですけども)


問題ありません。
何も送信しないだけです。
存在しないファイル名を指定しても何も送信されません。
MacOS Xでは500バイト以上のパスにすることが出来ます。

> あと、あまりにも長い文字を入れていくと、コピペをした際に値が表示されなくなったり、
> でもカーソルを移動させると突如文字が見えるようになったり、
> あまり見栄えのよろしくないことも発生します。
ブラウザ依存です。
特にMacでは、「ファイルを送信する(個人情報やセキュリティーに関係する)」ということを明確にするために、
CSSやタグ属性で見た目を変更したり隠したりすることに制限があります。

> 手入力だと入ってしまうので同期をとってほしいということでの対応なのです。
お客様理論への対応オツカレサマです(^^;
ファイルフィールドは、javascriptから操作することは出来ません。
なので、onsubmitで<input>のvalueを取って、
一定の文字数(バイト数)以上だったらalert()とreturn falseするくらいだと思います。

WindowsIEのみかもしれませんが、
http://www.microsoft.com/japan/msdn/columns/webt …
ファイルフィールドをdisplay:noneで隠しておいて、
かわりにテキストフィールドとボタンでエミュレートする方法です。
テキストフィールドなら、スタイルシートやJavaScriptで操作出来ると思います。

該当のページでも解説がありますが、正確なファイル名を手入力してもファイルを送信出来ません。
ですからdisabledを指定して、手入力出来なくしています

参考URL:http://www.microsoft.com/japan/msdn/columns/webt …
    • good
    • 0
この回答へのお礼

色々試していただけて感謝です。
ブラウザ依存ならブラウザ依存だと分かっただけでも、
対応無理です!と話ができるので大変助かりました。

今回とった対応とは異なりますが、
disabledを指定して手入力をなくすというのもよい手段ですね。
今後の参考にもなりました(^-^)
ありがとうございました!

お礼日時:2007/02/10 12:33

> また、ダイアログからパスを指定した場合、このパスが255byte以上(254byteはOK)だと、


> パス内容がボックスに反映されないのですが、
XP+IE7で確認しました。
Fxでは少なくとも265バイトまで可能ですのでOSのバグではなさそうですし、
仕様とは思えないので、ブラウザ(IE)のバグのようですね。

MacOS X + Fxは500バイト以上可能です。

この回答への補足

皆様アドバイス等ありがとうございました。

他の方が同様の問題を抱えたときのために、
念のため私の方でとった対応を書くと、
OnBlur(※フォーカス喪失時に発生)を<input type="file">に入れて、
フォーカスが外れた場合に254byte以上の入力があった際は、
アラートを出して、フォーカスをセットしなおすことにしました。
<input type="file">はボックスと参照ボタンとで成り立っているオブジェクトなので、
OnBlurイベントはtabキーでボックスから参照ボタンにフォーカスを移動させたときに起きないのが難点といえば難点なのですが、
OKが出たのでそういう形にした次第です。

補足日時:2007/02/10 12:26
    • good
    • 0

通常の文字列であれば無限に長いものをサーバーへ渡さないために制限をかけることがありますけど、


ファイルパスの場合受け取るのはパスで指定されたデータそのものなので文字数を規制する意味はありません。
むしろ規制するならば選択するファイルの容量をどうにかしたほうが宜しいのでは?^^;

この回答への補足

ダイアログから指定した場合は255バイト以上の長さになるパスは指定できないのに、
手入力だと入ってしまうので同期をとってほしいということでの対応なのです。
あと、あまりにも長い文字を入れていくと、コピペをした際に値が表示されなくなったり、
でもカーソルを移動させると突如文字が見えるようになったり、
あまり見栄えのよろしくないことも発生します。
そういうときにポストされたらどうなっちゃうのか、という問題もあるのです。
(そんな長い文字列をわざわざ入れる人もそうそういないとは思いますけどね ^_^;)

ファイルサイズに関しては既に対応済みなので、
お気遣いありがとうございます(^-^)

補足日時:2007/02/07 18:17
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました!

お礼日時:2007/02/10 12:34

W3Cでは text 及び password に使用する属性としてmaxlengthが挙げられています



http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401 …

> HMTL関連のHPを見ると、maxlengthが指定できることになっているのです。

昔のブラウザではtype="file"であっても maxlength を指定した場合、
入力による文字数制限をかけることが可能でした
(参照による場合は表示されてしまいますが、それ以上の直接入力は不可)

現在指定が出来ないのは、ブラウザのバージョンアップに伴い
W3C標準にするための改善と考えられます

この回答への補足

アドバイスありがとうございます。
URL、参考にさせていただきました。
昔のブラウザだったら有効だったんですね。
参照のダイアログから表示させたときって、
そのパス長に制限とかありましたか?
ご存知であれば教えていただきたく思いますm(_ _)m

補足日時:2007/02/07 18:15
    • good
    • 0
この回答へのお礼

W3Cのことを教えていただけて、とても助かりました!
ありがとうございました(^-^)

お礼日時:2007/02/10 12:35

fileの文字数をHTML側で制限する筋合いはないので、maxlengthなんて


指定できないのでは?そうなるとブラウザに依存するものだと推定できます。

この回答への補足

HMTL関連のHPを見ると、maxlengthが指定できることになっているのです。
http://www.tohoho-web.com/html/input.htm
なので、それが有効にならないのは何故だろう?というわけでして。
アドバイスありがとうございます。

補足日時:2007/02/07 13:11
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました!

お礼日時:2007/02/10 12:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!