「Android_マルチパートでポスト」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
[[トップページ]] > [[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>
を記述しておく。
[[トップページ]] > [[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