- 締切済み
携帯で撮影した画像をサーバーにアップロードしたい【iアプリ→PHP】
iアプリ携帯で撮影した画像をサーバーにアップロードし、 アップロードした画像をPHPでサーバーに保存したいと考えています 自分なりにネットや書籍を調べたのですが ・iアプリで画像をアップロードしcgiをつかってサーバーに保存 ・HTMLで画像をアップロードし、 PHPをつかってサーバーに保存 は情報(サンプルコード)はあるのですが、 iアプリ→PHPの方法(コーディング)がわかりません 特に、PHPがアップロードした画像データを取得する方法が わかりません HTMLからPHPを呼んだ場合は「$_FILES」を使用するのですがiアプリの場合はどう実現したらいいのでしょうか? ご存知の方がいらっしゃいましたら是非お願いいたします
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- hogehoge78
- ベストアンサー率80% (433/539)
http://d.hatena.ne.jp/nacookan/20080108/1199774995 ちょっと調べてみました。 こちらのブログに、javaアプレットでファイルのアップロードの実装の仕方が書いてありました。 後は、iアプリでソレを行うためのクラスが利用可能であれば出来るようです。
- hogehoge78
- ベストアンサー率80% (433/539)
iアプリで実装するにしても、なんにしても、ファイルをPOSTして、そのPOSTされたデータをPHPで受信するのであれば、Webサーバに対して、HTTPプロトコルでデータを送信しなければなりません。 例えば、普通のフォームで、単純にINPUTタグに記述された内容を送信した場合も、HTTP通信してますが、その場合は、 ============================================================= POST /php/path HTTP1.0 Host: www.example.com Content-Type: application/x-www-form-urlencoded Content-Length: 47 input_name=input_value&input_name2=input_value2 ============================================================= このようなHTTPヘッダ(とPOSTされた内容)をWebサーバに送信してやり、PHPでその結果を受信し、$_POSTにデータを格納してます。 そして本題のファイルのアップロードに関しては ============================================================= POST /php/path HTTP1.0 Host: www.example.com Content-Type: multipart/form-data Conent-Length: ファイルの長さ -----------------------------boundary Content-Disposition: form-data; name="test"; filename="ファイルの名前" Content-Type: ファイルタイプ コンテンツの内容(つまり画像だったら画像のバイナリが記述される) -----------------------------boundary-- ============================================================= このようなHTTPヘッダを記述してやる必要があります。 iアプリで行う場合でも、HTTP通信を行うためのメソッドなりクラスなりライブラリを利用して、上記のような生のHTTPヘッダを記述し、送信するような流れになると思います。 もし、iアプリにこだわっておらず、簡単に済ませる場合は、添付ファイル付のメールでサーバに送信して、PHPで処理するという方向ではどうでしょう。つまり携帯電話の空メールで登録するという処理と近い処理で出来るので割かし簡単だと思います。 http://hal456.net/qdmail_rec/&category?cat=%E6%9C%AA%E5%88%86%E9%A1%9E このようなライブラリもあります。
補足
hogehoge78様 回答ありがとうございます HTTPヘッダの編集方法について質問です Content-Typeについては「setRequestProperty」で設定できるのですが、Content-Dispositionをどのように設定するのかを調べたのですがわかりませんでした またHTMLは、 <form action="file_upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="upfile"><br> <input type="submit" name="submit" value="SEND"> </form> と記述した場合、$_FILES['upfile']['name']にアップロードしたファイル名が格納されると思いますが、iアプリからHTTP通信をした場合はどのように、ファイル名を取得するのでしょうか? 今回はiアプリを前提としています 残念ながらメールでのアップロードは使えないのですが 今後他の機会があれば参考にさせていただきたいと思います
- MOMON12345
- ベストアンサー率32% (1125/3490)
#1です。 Sourceがありました。 ちょっと古いですが、送受信の所は参考になると思います。 http://www.nakka.com/i/npop/ inpop.cgiがサーバ側で動くものです。 バイナリというかデータを送受信するときに、何をやろうとするのかなどのコマンド交換が必要なケースがありますよね。 ところが、データなのかコマンドなのかの判断がしにくいために特定の文字列の連続がコマンドに解釈されて不具合を起こす場合があります。 上記のSourceでも特定の文字は送れないようです。 なので、何らかのコードにエンコードするなどちょっと工夫が必要になるかと思います。
補足
MOMON12345様 回答ありがとうございます サンプルソースありがとうございます たびたび申し訳ありませんが、質問です 基本的にcgiでもPHPでもiアプリ側のコーディングに関しては同じ様に考えてOKということでしょうか?
- MOMON12345
- ベストアンサー率32% (1125/3490)
iアプリからはHTTPの通信しかできませんので、フォームを使ったPOSTを行うことになります。 バイナリを通せるように工夫するか、データの方を加工するかも必要でしょう。 httpdサーバ側は普通にブラウザからPOSTされたデータを読むようにすればOKです。 なおiアプリは、そのアプリをダウンロードしたサーバでかつ名前(FQDN)が付いているものとしか通信が出来ません。
お礼
MOMON12345様 早速の回答ありがとうございます 私の知識不足のため、何点か質問させてください >フォームを使ったPOSTを行うことになります。 「フォームを使ったPOST」の実現方法を教えていただけますか? HTMLの場合FORMタグを使用するはわかるのですが iアプリではどのようにするのでしょうか? (CanvasやPanelにフォームを埋め込む? iアプリにHTMLが書き込める?等々) >バイナリを通せるように工夫するか、 大変申し訳ありませんが、バイナリを「通す」の意味が難しいです >データの方を加工するかも必要でしょう。 cgiをつかったサンプルプログラムで画像データを出力ストリームにセットしていたのですが、そのような処理の事でしょうか? 質問の文章が稚拙で分かりづらいかもしれませんが、よろしくお願いいたします
補足
ここに書くべき内容を「この回答へのお礼」に記入してしまいました 申し訳ありません
補足
hogehoge78様 回答ありがとうございます iアプリで行うためのクラスを調査中です 結果が出てからお返事をしようと思っていたのですがまだ見つからず お返事が遅くなってすみません 改めて結果を書き込みます