Android_マルチパートでポスト

「Android_マルチパートでポスト」の編集履歴(バックアップ)一覧に戻る

Android_マルチパートでポスト - (2013/07/06 (土) 15:01:41) のソース

[[トップページ]] > [[Android]] > マルチパートでポスト

** Androidでのマルチパート送信

Androidの標準のライブラリだけだと出来ないっぽいので、
http://d.hatena.ne.jp/glass-_-onion/20110611/1307799129
で公開されたライブラリのようなものを、自分で作成するのが良いと思う。

上記参考サイトのものは、良く出来るけれど、2つの点で改良した方が良いと思われる(2013/7/6現在)。

1. mimetypeが画像専用になっている
    String[] fileChunks = fileName.split("\\.");
    String fileType = "image/" + fileChunks[fileChunks.length - 1];
画像以外のファイルを添付する場合は、mimetypeをかえられるようにしたい。

2. バイト単位で送信するときに、問題あり。
 while(fis.read(b) > 0) {
        bo.write(b);
      }
の部分で、10バイトずつ送っているが、最後が10バイトできっちり遅れない場合、ごみが
数バイト分、付与されてしまう。1バイトずつの転送にするか、転送のリミットを指定して
ごみが送られないようにする。

また、マルチパートのboundaryが固定なので、
http://stackoverflow.com/questions/2071257/generating-multipart-boundary
を参考に、ランダムでboundaryが作られるようにしたい。

 TODO 改善したサンプルコードの記述

*** 注意点
マルチパートに限らないが、Android 3.0以上では、メインスレッドでhttpにアクセスすると
android.os.NetworkOnMainThreadExceptionが出てしまう。

http://shirusu-ni-tarazu.hatenablog.jp/entry/2013/01/20/033030
に、AsyncTaskを使用したわかりやすい対応方法が書いてあるので、それを参考に。

*** 注意点2
こちらも、マルチパートに限らないが、Androidマニフェストファイルに、INTERNET接続を
許可しないと、Host not foundになってしまう。忘れずに、
 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
を記述しておく。

2013/7/6