• ベストアンサー

input type="file"のmaxlengthについて

こんにちは <input type="file">について、以下の点お教えください。 ソースで<input type="file" name="test" maxlength="10"> とした場合に、コピー&ペーストでは、例えば20byte文字列を貼り付けると10byteまでしかボックスには反映されないのですが、 その後直接手入力ができます。 また、ボタンからダイアログを起動してパスを指定した場合も、maxlength以上の桁数がセットされます。 ソースの書き方が悪いのでしょうか? それとも手入力文字数やダイアログからの桁数の制限をかけられないという仕様(HTML?IE?)なのでしょうか? また、ダイアログからパスを指定した場合、このパスが255byte以上(254byteはOK)だと、 パス内容がボックスに反映されないのですが、 これもまた仕様なのでしょうか? (ファイル名の最長桁数が256byteだと思うと問題があるような気がするのですけども) ※私のマシンはWinXPでIE6のSP2を使用しています。 以上の点について、何か情報をお持ちの方は回答お願いします!!

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

> (ファイル名の最長桁数が256byteだと思うと問題があるような気がするのですけども) 問題ありません。 何も送信しないだけです。 存在しないファイル名を指定しても何も送信されません。 MacOS Xでは500バイト以上のパスにすることが出来ます。 > あと、あまりにも長い文字を入れていくと、コピペをした際に値が表示されなくなったり、 > でもカーソルを移動させると突如文字が見えるようになったり、 > あまり見栄えのよろしくないことも発生します。 ブラウザ依存です。 特にMacでは、「ファイルを送信する(個人情報やセキュリティーに関係する)」ということを明確にするために、 CSSやタグ属性で見た目を変更したり隠したりすることに制限があります。 > 手入力だと入ってしまうので同期をとってほしいということでの対応なのです。 お客様理論への対応オツカレサマです(^^; ファイルフィールドは、javascriptから操作することは出来ません。 なので、onsubmitで<input>のvalueを取って、 一定の文字数(バイト数)以上だったらalert()とreturn falseするくらいだと思います。 WindowsIEのみかもしれませんが、 http://www.microsoft.com/japan/msdn/columns/webteam/webteam07022001.aspx#webteam07022001_topic1 ファイルフィールドをdisplay:noneで隠しておいて、 かわりにテキストフィールドとボタンでエミュレートする方法です。 テキストフィールドなら、スタイルシートやJavaScriptで操作出来ると思います。 該当のページでも解説がありますが、正確なファイル名を手入力してもファイルを送信出来ません。 ですからdisabledを指定して、手入力出来なくしています

参考URL:
http://www.microsoft.com/japan/msdn/columns/webteam/webteam07022001.aspx
16tukiya11
質問者

お礼

色々試していただけて感謝です。 ブラウザ依存ならブラウザ依存だと分かっただけでも、 対応無理です!と話ができるので大変助かりました。 今回とった対応とは異なりますが、 disabledを指定して手入力をなくすというのもよい手段ですね。 今後の参考にもなりました(^-^) ありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.5

> また、ダイアログからパスを指定した場合、このパスが255byte以上(254byteはOK)だと、 > パス内容がボックスに反映されないのですが、 XP+IE7で確認しました。 Fxでは少なくとも265バイトまで可能ですのでOSのバグではなさそうですし、 仕様とは思えないので、ブラウザ(IE)のバグのようですね。 MacOS X + Fxは500バイト以上可能です。

16tukiya11
質問者

補足

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

すると、全ての回答が全文表示されます。
  • MAN_MA_RUI
  • ベストアンサー率41% (426/1024)
回答No.3

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

16tukiya11
質問者

お礼

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

16tukiya11
質問者

補足

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

すると、全ての回答が全文表示されます。
  • suzuki-_-
  • ベストアンサー率77% (152/195)
回答No.2

W3Cでは text 及び password に使用する属性としてmaxlengthが挙げられています http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#adef-maxlength > HMTL関連のHPを見ると、maxlengthが指定できることになっているのです。 昔のブラウザではtype="file"であっても maxlength を指定した場合、 入力による文字数制限をかけることが可能でした (参照による場合は表示されてしまいますが、それ以上の直接入力は不可) 現在指定が出来ないのは、ブラウザのバージョンアップに伴い W3C標準にするための改善と考えられます

16tukiya11
質問者

お礼

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

16tukiya11
質問者

補足

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

すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

fileの文字数をHTML側で制限する筋合いはないので、maxlengthなんて 指定できないのでは?そうなるとブラウザに依存するものだと推定できます。

16tukiya11
質問者

お礼

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

16tukiya11
質問者

補足

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

すると、全ての回答が全文表示されます。

関連するQ&A