- ベストアンサー
htmlのfileタグに自動で値を入れる方法
htmlのタグでいって <input type="file">を用いてファイルをサーバーにアップロードしたいと思っています。で、このとき、ファイル名は任意に選べるのではなく固定で送信したいと思っています。 すなわち、HTMLを読み込んだ時点で、fileのテキストボックスにファイルパスが埋め込まれているか、JavaScriptで、ファイルパスを自動入力するようにしたいと思っています。 最終的には、form内のオブジェクトをすべて非表示にし、onload時にsubmitするような形にしたいと思っています。いろいろ事情があって苦肉の策になっています…。 とりあえず(だめだとは思っていたのですが) <input type="file" value="ファイルパス" name="filepath"> と直書きにしてみたり document.all.filepath.value = "ファイルパス"; などとしてみたりしましたがだめでした…。 W3C勧告の使用上はvalueでファイルパスを指定できるようになっているようなのですが、現在の一般的なブラウザでは禁止されているようですね。 このような場合、何らかの方法でfileにファイルパスを自動入力することはできますでしょうか? もしできない場合、何らかの方法で実現する方法はありますでしょうか?よろしくお願いします。 ちなみに実現できればいい環境は WinXP環境のIE6です。言語はクライアント言語はJavaScriptのみで、という条件付です。 できないかもしれないのですが、こういうのって必要になるときもあるよなーなどと思っており、もしかしたら解決方法があるかもしれないと思い質問しました。よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
やっぱ無理じゃないでしょうか。 なにか裏ワザ的な方法で一時的にできたとしても、いつか直されるかもしれないのでおいそれとは使えないし。 >W3C勧告の使用上はvalueでファイルパスを指定できるようになっている →参考URL 「ユーザが明示的に送信を求めたファイル以外のものは送ってはいけない」とあります。
その他の回答 (6)
- bobviv
- ベストアンサー率50% (13/26)
すでにご指摘のとおり、セキュリティ上の理由からfileフォームにはスクリプトで値を設定できないようになっているようです。詳細は知りませんが、セキュリティ上の理由からそうなっているということは、おそらく『回避手段など存在しない』と考えたほうがいいと思います。 つまり、ふつうはあきらめるべきだということです。時間の無駄です。あなたがクラッカーなら別ですが^^。
お礼
ありがとうございます。
- kosa
- ベストアンサー率25% (379/1464)
もしかして方向性が違った回答になるかもしれまんせが、間違っていれば気にしないで下さい。 ファイル名を固定にする理由がよくわかりませんが、凄く面倒なことをしていることからソースを見られるとまずいということですよね? そういうことならば、FALSHでフォームを作成してあげればソースを見られることなく、もっとシンプルに作る事ができると思うのですが・・・
お礼
ありがとうございます。
- yambejp
- ベストアンサー率51% (3827/7415)
ちょっと前まで通常formのsubmitもセキュリティ上の 理由からスクリプトから実行できなかった 記憶があります。 便利とセキュリティは表裏一体ですからねぇ。 もし可能であれば、PC上のすきなファイルをがんがん 抜いたり、でかいファイルを攻撃先におくりつけたり いろいろできてしまうでしょう。
お礼
ありがとうございます。 >ちょっと前まで…submitも…できなかった そうなんですか。それは面白い情報ですね。 そうなんですよ。それで困っているのです。 無理でしょうかね。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
<input type="file"> は、セキュリティ上の理由から(そのページにアクセスした時に、自動的に指定されたファイルが抜かれてしまうことになる)スクリプトから値の設定はできません。
お礼
ありがとうございます。そうなんですよね。 で、なんとかならないものかと思っているのです。 追加しますと、固定ファイルとは自由に書式を変更できるので、もうほんとに最悪の場合、base64エンコーディングしてjsファイルの変数の文字列としてでも持たせて、それを読み込んでform中の要素に設定し送信とか、そんなものすごい方法を考えているのですが、すこしやりすぎなのでもう少しまともな方法はないかと思っているしだいであります…。
勘違いしておりましたね、やはり。では後は識者に任せます。 不愉快な思いをされたようで失礼しました・・・お許しを。
JavaScriptはクライアント側、ブラウザを動かすものであってサーバを動かすわけじゃありません。そうなると違う言語(Perlなど)を利用するしかないと思われます。
補足
サーバーの構成は書く必要はないと思ったのですが、誤解される方がおられるようなので書いておきます。サーバーサイド言語はJavaでサーブレットでの稼動になります。 そのサーブレットにhtmlから情報をpost送信するときの話です。そのときの情報の中に、あらかじめ定められたファイルを含めたいということです。
お礼
>→参考URL 「ユーザが明示的に送信を求めたファイル以外のものは送ってはいけない」とあります。 うわ。なんか勘違いしてたみたいです。有用な情報ありがとうございます。