• 締切済み

input type="file"で複数選択を可能にする方法

初めて利用させていただきます。初心者の為、できれば詳細なご回答いただけると嬉しいです。 早速ですが、<input type="file">の実行結果は、テキストエリアの横に【参照】ボタンがあるような状態になります。 このテキストエリアの部分に複数のファイルをどんどん選択して格納できる方法を探しております。 イメージとして、3行くらいがデフォルト表示のテキストエリアがあり、その横に【参照】と【削除】ボタンが上下に並び、 参照で選択したファイルがそのテキストエリアに格納されてゆき、3行を超えるとスクロールバーが表示される、 格納されたあるファイル名を反転させて【削除】選択で削除される、 というものを作りたいのです。 今回、クライアントの要望で添付ファイルは1000個まで選択可能という状態を実現しなくてはならず、<input type="file">を1000個並べる訳にもいかない為、とても困っております。 且つ、java script禁止令を出されています。 ファイル形式はjspですので、formのactionでサーバ側で処理を制御することは可能です。 念の為、私が探し出したソースで一番理想に近いものを併記致します。 <table>  <tr>   <td rowspan="2" nowrap><select name="File" size="3" multiple> <option value="">                         </select></td>   <td>   <iframe width="60" height="25" frameborder="no" scrolling="no" src="とあるexeファイルを指定"></iframe>   </td>   <td rowspan="2" valign="top" nowrap><font size="-1">「参照...」ボタンをクリックして<br>ファイルを指定してください。</font></td>  </tr>  <tr>   <td nowrap><input type="button" value=" 削除 " onClick="RemoveFile( this.form )"></td>  </tr> </table>

みんなの回答

回答No.3

ファイルフィールドを5個くらいにして、 ホスティングサービスなどで使われているいわゆるファイルマネージャーや、 ブログのファイルアップロード画面(アップロード済みファイル管理画面)みたいな物が現実的じゃないでしょうか。 (これらは通常はクライアントサイドスクリプトやブラウザプラグインなどを使いません) 同時に1000個とか、ディレクトリ(フォルダ)指定で送信というのは、 HTMLやJavaScriptではできません。 (やってやれなくはないですが、ご存じの通り(ご想像の通り?)<input type="file">が1000個並ぶことになります) VBScriptなら、フォルダ指定ダイアログを使ったりとか、ファイル選択ダイアログのカスタマイズができるかもしれませんが、、、 JAVAAppletでもファイルの保存は制限されると思うので、 ファイルを選択->Appletで圧縮してメモリ内にデータを保存、 ファイル名はそのまま表示、 送信時には、メモリ内のデータを送信 という流れで出来るんじゃないでしょうか。 (とはいえ、1000個のファイルを1度で選択するダイアログを表示出来るかどうか、、、) 1000個も送るなら、むしろFTPを使った方がいいと思うのですが、、、 FirefoxのFireFTPとか、メジャーなブラウザも簡単なFTP機能を持っていますから。

shoten
質問者

お礼

ありがとうございます。 当初の疑問であった『ファイルを複数格納できるテキストエリア』については簡単には解決できそうにないので、今回は諦めることに致しました。 なので、この質問を閉めようと思います。 私なりの対処法としては、やはりJavaAppletを埋め込んで、 圧縮対象は .setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY) でフォルダに絞って、そのフォルダの中に1000個入ってたらそれで良し、としようかと… ただ、今回の対象になるファイルが画像ファイルに限定されるかもしれないので、 もし指定されたフォルダの中に画像以外のファイルがあったらどうするのか、などの問題は残るのですが。 (無視するかfilefilterを設定するべきか) 現状、Appletの動作状況が芳しくないので、srcは公開できませんが、 頑張ります。 ご返答くださったお二人に感謝いたします。ありがとうございました。

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

一度におくれるサイズの制限とかもきびしめなので、いずれにしても 1000となると非現実的かもしれませんね。 また1000も欄をつくってしまうと、作業上もかなり問題になりそうですので 何度かにわけてやる必要があると思いますが・・・。

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

必要ファイル数入力→サブミット→必要ファイル数分file領域確保 とすればよいでしょう。 type=fileはセキュリティが特にきびしいので、そんなに調整が ききませんので

shoten
質問者

お礼

早速のご回答、ありがとうございます。 参考にさせていただきます。 ただ、その方法ですと、実際ユーザが1000近いファイルを指定したいとき、正確な数値を要求するのはムリがあると思われます。 現時点で回避方法として、Java Appletで【フォルダ参照】ボタンを作成し、 送信したいファイルを詰め込んだフォルダをユーザに選択させて、 【OK】でフォルダを圧縮して<type=file>のテキストエリアに挿入、 というのは考えております。 その場合でも、ファイル(圧縮されたフォルダ)を格納するテキストエリアは複数表示可能が希望なので、 引き続き、良いご回答をお待ちしたいと存じます。 宜しくお願い致します。

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