MIMEマルチパートによる画像データの送信について

822 views
Skip to first unread message

ariki2002

unread,
Jun 22, 2011, 5:28:42 AM6/22/11
to 日本Androidの会
お世話になっております。
現在、カメラで撮影した画像とコメントを、PHPサーバに送信してサーバ側で管理する
アプリ+Webサービスを作成しています。

データの送信はMIMEマルチパートで行うため、
http://typea.info/blg/glob/2010/09/android-mime.html
上記サイト等を参考に、必要なライブラリを揃え、下記のソースコードにて
送信処理を作成し実行してみたところ、messageの文字列データは正しく送信できていましたが、
画像ファイルは受信ができておらず、$_POST['img']をisset()関数にかけたところ、FALSEが
返されてしまいました。

バイナリファイルの送信には他に必要な処理があったり、それとも単に
$_POST['img']では取得できないのでしょうか。
ご存知の方がいらっしゃれば、ご教授のほどよろしくお願いいたします。

// 以下、送信側ソースコー
ド //////////////////////////////////////////////////////////

// POST リクエスト準備
DefaultHttpClient client = new DefaultHttpClient();

HttpParams params = client.getParams();
HttpConnectionParams.setConnectionTimeout(params, 10*1000); //接続のタイムアウ

HttpConnectionParams.setSoTimeout(params, 10*1000); //データ取得のタイムアウト
client.setParams(params);

HttpPost post = new HttpPost(url); // 送信先URL(http://は入っていること)
MultipartEntity entity = new MultipartEntity();

// パラメータをセットする
entity.addPart("message" , new
StringBody(message,Charset.forName("UTF-8")));
entity.addPart("img" , new FileBody(new File(imgPath),"image/jpg"));
post.setEntity(entity);

// データ送信
HttpResponse res = client.execute(post);

///////////////////////////////////////////////////////////////////////////////

※ 受信サーバで、isset($_POST['message'])の結果はTRUE、isset($_POST['img']) の結果は
FALSEが返った。
またimgpathの内容は、inputstreamやdelete処理が行えていたので、パスの間違いではないようです。

Yoshida Kenichi

unread,
Jun 22, 2011, 8:40:24 AM6/22/11
to android-g...@googlegroups.com
神戸支部の吉田@ECCコン専と申します。

HttpClientを用いてAndroid端末を搭載したロボットカーから
カメラ画像を数秒おきにWebサーバにアップロードする仕組みを作っています。

> バイナリファイルの送信には他に必要な処理があったり、それとも単に
> $_POST['img']では取得できないのでしょうか。

「バイナリファイルの送信には他に必要な処理があったり」します。
端的な答え:普通のPHPerなら$_FILESを使う。
あえてやるとすれば、isset($_FILES['img']['name'])が
trueかどうかを判定すればいいと思います。

(使用例)URLにあるphpファイルのソースコードに…
//元のファイル名がセットされていたら、格納しておく
if(isset($_FILES['img']['name'])){
$filename =$_FILES['img']['name'];
}
//アップロードされたファイルは一時ファイル$_FILES['img']['tmp_files']なので
//任意のディレクトリに移動させる
move_uploaded_file($_FILES['img']['tmp_files'], "./image/".$filename);

ここでは、imageディレクトリに元のファイル名で移動しています。
(エラー処理は省きました)

上記PHPソースの動作確認のために、あらかじめ以下のような
HTMLファイルを用意してアップロード動作確認しておいたほうがいいと思います。
<body>内に…
<form method="post" enctype="multipart/form-data"
action="URLにあるphpファイル">
<input type="file" name="img">
<input type="submit" value="uploadする">
</form>

ではよろしくお願いします。

(参考サイトでこういった説明が無いのは、たぶん
普通にPHP書いてる人がやってしまうからですよ~^-^;;)


2011年6月22日18:28 ariki2002 <arik...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

ariki2002

unread,
Jun 22, 2011, 9:37:43 PM6/22/11
to 日本Androidの会
To:吉田さん

ご返答ありがとうございます。_POSTではなく_FILESだったんですね。
早速該当の部分を修正したところ、きちんと処理できていました。
まことにありがとうございます。
> 2011年6月22日18:28 ariki2002 <ariki2...@gmail.com>:
> > ///////////////////////////////////////////////////////////////////////////-////
Reply all
Reply to author
Forward
0 new messages