Android_マルチパートでポスト


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

トップページ > 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