Android端末のファイルをサーバーにアップロードします。
今回はクライアント側だけでなくサーバー側も必要になります。
準備するものとしては
◎サーバー側
・POSTされたファイルを受け取るスクリプト
これはPOSTを受け取れるのであればPHPでもJavaでも大丈夫みたいです。
※私はPHPで作りました。
◎クライアント側
・アプリケーション
・指定のアーカイブファイル(jarファイル)
多分これだけです←
まずクライアント側から
1.jarファイルの読み込み
・http://hc.apache.org/downloads.cgiへアクセスして【HttpClient (GA)】欄から最新のバージョンをダウンロードします。※2012/10/04では最新は4.2.1です。
・ダウンロードが終わったら展開してlibフォルダから『httpclient-4.2.1.jar』と『httpmime.4.2.1.jar』を取り出します。
・アプリ側でプロジェクト直下にlibsフォルダを作成して、そこに先ほど取り出した2つのjarファイルを入れます。
・プロジェクトのプロパティー→Javaのビルド・パス→ライブラリー→Jar追加 から二つのjarファイルを追加します。
・ライブラリーの隣にある順序およびエクスポートに移りインポートしたファイルにチェックします。
これで読み込みは完了です。
2.ソースコード生成
try { HttpClient httpClient = new DefaultHttpClient(); // ポスト先のファイルを指定 HttpPost httpPost = new HttpPost(【サーバーサイドスクリプトのURL】); ResponseHandler<String> responseHandler = new BasicResponseHandler(); MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); // ファイル名&パスを指定 File file = new File(【ファイル名】); FileBody fileBody = new FileBody(file); // KEYとファイルを指定 multipartEntity.addPart("upfile", fileBody); httpPost.setEntity(multipartEntity); httpClient.execute(httpPost, responseHandler); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
※サーバー側へのアクセスはURLをそのまま記述。
※Android端末からアップロードするファイル名はフルパスで記述すれば確実です。
メソッドの説明は面倒なので省きます。
ソースはこれでOKですが、ですが!
これをメインタスク(Activityに直接)書いてしまうとエラーになります。
ネットワーク通信系のものはいつ終わるか分からないので別タスクで動かす必要があります。
なので前に書いたインターネット上の画像を表示する(Android4.0)を参照、応用してマルチタスクにしてください。
これでソースは完了です。
3.サーバー側スクリプト
$target_dir = "【アップロードディレクトリ】"; $target_path = $target_dir . basename( $_FILES['【POST_KEY】']['name']); if(move_uploaded_file($_FILES['【POST_KEY】']['tmp_name'], $target_path)) { echo "The file ". basename( $_FILES['【POST_KEY】']['name'])." has been uploaded"; } else{ echo "エラーが発生しました。"; }
簡単に言うと受け取って、指定のディレクトリへ放り投げてます。←
一応これで完成です。
AndroidManifest.xmlのネットワーク通信許可を忘れずにしてくださいね。
参考サイト
HTTP POST によるファイルのアップロード
Pingback: [Android] HTTP POSTを使用したファイルアップロード | 見習いの備忘録 : ちゅどん道中記