• 締切済み

画像をデータベースから送信したい

画像をデータベースから値を持たせて 送信したいのですが、送信先が他のサーバーの為に 値を持たす事ができません。 <INPUT type=file を使わず hiddenを使用したいのですが、webブラウザの関係上 無理のようです 回避する方法教えていただけないでしょうか? 回答よろしくお願いいたします。

みんなの回答

回答No.3

私も現在AJAXを利用してファイル管理をする仕組みを作っているので、参考になればと思います。 さて、いくつかの事柄が重なっているようなので、質問の内容がよくわからなくなっています。そこで、かなり私の想像をいれて回答します。 まず、すでに回答があったとおり、JavaScriptで通信を行う場合、ファイルは送信できません。文字列なら送信できます。なのでたとえAJAXを使ったとしてもこの制限は変わりません。 また、type属性を持ったinput要素の内容は、JavaScriptで操作できません。イベント「onchange」で値をとりだす、くらいがせいぜいです。 次に、hiddenを利用したいということなので、ファイルを選択するボックスを表示したくはないけど、ファイル選択ダイアログ表示が可能になるようにしたいという認識で間違いないでしょうか?それならば表示の問題になるので、CSSを駆使してみることをお勧めします。たとえば私なら、file属性を持つinput要素と、例えば「選択」のような文字が描かれたきれいな画像を指定したimg要素を準備して、cssで重ねてしまいます。重ねるためにはposition、top、right、bottom、leftをそれぞれ適切に設定します。クリックしたときにちゃんとファイル選択ダイアログが開くようにするために、visibility:hiddenやbackground:transparent、z-indexを適切に設定します。 別ドメインに送信する場合はform要素のaction属性にそのドメインに設置したスクリプトのurlを設定します。もちろんこのスクリプトにはアップロードファイルの処理がかかれていなければなりません。 加えてファイルアップロードのために、form要素のenctype属性がmultipart/form-dataに、method属性はpostになっている必要があることをお伝えしておきます。 「データベース」と「画像」という単語が出てきたので、追記。 このデータベースがmysqlなどであったなら、テーブルのフィールドの定義に「BLOG型」という、バイナリを入力できるものがあります。こちらを利用すると「データベースに画像を入力する」ことができます。 もしAサーバのデータベースに作ったテーブル内の画像を、Bサーバのスクリプトに送信して処理を行うようなスクリプトをAサーバに設置したいのであれば...それはまた別なお話になるので、PHPやPerlのコミュニティに質問するのがよいでしょう。 こういう場合は、問題を切り分けてから質問をすると、お互いに理解が容易になってとてもよいと思います。 開発大変でしょうが、がんばってください☆

回答No.2

> 画像をデータベースから値を持たせて この文章は何をおっしゃりたいのかわかりませんが、 > 送信したいのですが、送信先が他のサーバーの為に > 値を持たす事ができません。 これはできますよ。 actionをhttp://から始まる絶対URLで書いてください。 <form action="http://www.example.com/upload.cgi" method="POST"> <input type="file" name="a"> <input type="hidden" name="b" value="aiueo"> <input type="submit" value="send"> </form> 制限として、fileフィールドのvalueに値を入れられないという事があります。 (JavaScriptでも入れられませんし、 <input type="file" value="C:\My Document\password.txt"> などのような書き方をしてもvalueは無視されます)

vaixm
質問者

補足

ご返答有難うございます。 <input type="file" value="C:\My Document\password.txt"> などのような書き方をしてもvalueは無視されます) この時にvalueに値を持たせても無視されますよね。 hiddenでも駄目ですし、何か良い方法はないでしょうか?

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.1

Webブラウザ環境内で動作する JavaScript が 入出力類の動作をするのは、セキュリティ上の理由で禁止されています。 例外は、そのJavaScript自身を供給した Web サーバーへ Ajax で HTTPアクセスできることです。 だから、目的のデータベースにアクセスできる Webサーバー内に、AjaxアクセスをするJavaScriptとその HTTPリクエストを受けてデータベースアクセスするCGIを入れておけば良いと思います。 目的データベースにアクセス可能なマシンにCGIやJavaScriptをアップロードするアカウント持ってないなら、あきらめましょう。 目的のデータベースがユーザー認証するタイプの場合、そのユーザー・パスワードは閲覧者に入力させるかCGI内に書く事になります。 前者の場合、JavaScriptがCGIにアクセスするURL中に、平文パスワードを含めないよう注意しましょう。

関連するQ&A