aguuu
iOSからHTTP経由でファイルをサーバーにアップロードする方法
iOSからファイル(主に画像)をアップロードする方法がわからずに調べていました。
サンプルはいくつか発見したのですが、複数の画像のポストが出来なかったりして悶々としていました。
「やるしかない!」っと言うことで、オレオレクラスを使って今後も使い回せるようにしてみました。
サンプルコードは以下から。よろしければどうぞ。
使い方はこんな感じです。
「HTTPFileUpload.h」「HTTPFileUpload.m」をプロジェクトに追加
まずは、プロジェクトに上記のクラスを追加します。
追加したクラスを読み込む
「import」を使って読み込みます。
1 | #import "HTTPFileUpload.h" |
POSTする画像をインスタンス化する
POSTしたい画像をインスタンス化します。
1 2 | UIImage *image1 = [UIImage imageNamed:@"Icon.png"]; UIImage *image2 = [UIImage imageNamed:@"Icon.jpg"]; |
送信データを作成してポストする
1行目:取り込んだクラスをインスタンス化します。
2行目:デリゲートでポスト結果やエラーを受け取るので処理先を指定します。
3行目:もし、ポスト時に文字列も渡すのなら「setPostString:withPostName:」を使ってデータをセットします。1つめの引数が渡すデータで2つめの引数がサーバー側で受け取る際に使用するポスト名。
4〜5行目:ポストする画像をセットします。文字列の場合と同様に1つめの引数が渡すデータで2つめの引数がサーバー側で受け取る際に使用するポスト名。
6行目:ここでポストするuriを指定してデータをポストします。
1 2 3 4 5 6 7 | HTTPFileUpload *httpFileUpload = [[HTTPFileUpload alloc] init]; httpFileUpload.delegate = self; [httpFileUpload setPostString:@"1234" withPostName:@"password"]; [httpFileUpload setPostImage:image1 withPostName:@"data1" fileName:@"Icon.png"]; [httpFileUpload setPostImage:image2 withPostName:@"data2" fileName:@"Icon.jpeg"]; [httpFileUpload postWithUri:@"http://xxx.localhost/"]; [httpFileUpload release], httpFileUpload = nil; |
ポスト結果またはエラーをデリゲートで受け取る
「httpFileUpload:didFailWithError:」でネットワークエラーの際などのエラー処理を行います。
「httpFileUploadDidFinishLoading:result:」でポスト後の処理を行います。もしポストした結果を受け取る場合には2つ目の引数の「result」にNSStringで返ってくるのでそれらを使用して処理を行います。
1 2 3 4 5 6 7 8 9 | - (void)httpFileUpload:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"%@", error); } - (void)httpFileUploadDidFinishLoading:(NSURLConnection *)connection result:(NSString *)result { NSLog(@"%@", result); } |
あとは今後の課題や問題点など
- HTTPFileUpLoadとは名ばかりの画像(jpg、png)しか対応していません。必要になったら他ファイルにも対応しようかと。
- 自分が作ったプロジェクトでは正常に動いていますが。。。まだ使い込んでいないのでバグがあると思います。
そんな不安満載のクラスですが、少しでも参考なればということで公開しています。
もし、バグなどありましたら教えてください。
それにしてもHTTPの構造が少しだけ理解できてとっても勉強になりました。
Android版のLocal searchをリリースした
ということで「Local search」のAndroid版をリリースしました。
初めてのAndroidアプリでしたが、0からのスタートで約2週間で何とかリリースまでこぎつけました。
iPhone版よりも機能が足りませんが。。。
当面の目標は
- iPhone版と同等の機能を実装する。
- リファクタリング
Android携帯をお使いの方は、よろしければどうぞ。
今回もプロモビデオを作ってみました。やっぱりJazzierに。w
Local search Ver 1.3をリリースしました。プロモビデオあり。
Local searchがまもなくVer 1.3になります。
※現在、iTunesではまだアップグレードが反映されていないみたい。
今回の変更点は下記の通り。
- 地図表示の際のアニメーション効果を追加
- イベント開始日、終了日の曜日を表示
- イベント検索の距離を1〜100mの範囲で自由に変更
- メモリ警告時のバグ修正
- 操作時の速度向上
ついでに、プロモーション用の映像を作ってみました。
音楽とかつけてJazzerにしてみました。w
※音が出ます。
- 検索
- フィード
- メタ情報


