ページ

2010年3月29日月曜日

Keychain Services 調査 (23) twitpic へ画像をアップロード(その3)画像をアップロード

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

(前回)Cocoaの日々: Keychain Services 調査 (22) twitpic へ画像をアップロード(その2)asi-http-request を使う

いよいよ twitpic へ画像をアップロードする。今回は sample.jpg を用意してこれをアップロードしてみよう。


asi-http-request ではフォームデータ送信用のクラス ASIFormDataRequest が用意されており、これを使うと multipart/form-data なリクエストも数行で送信することができる。使い方は How to use it の中の Sending data with POST or PUT requests に書かれている。

ASIHTTPRequest example code - All-Seeing Interactive

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
[request setPostValue:@"Ben" forKey:@"first_name"]; 
[request setPostValue:@"Copsey" forKey:@"last_name"]; 
[request setFile:@"/Users/ben/Desktop/ben.jpg" forKey:@"photo"];

やってみよう。sample.jpg を xcodeのプロジェクトへ追加した後、下のコードを書く。

NSURL *url = [NSURL URLWithString:@"http://twitpic.com/api/uploadAndPost"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

[request setPostValue:loginAccount.loginId forKey:@"username"];
[request setPostValue:loginAccount.password forKey:@"password"];

NSString* filepath = [[NSBundle mainBundle] pathForImageResource:@"sample"];
NSLog(@"filepath=%@", filepath);

[request setFile:filepath forKey:@"media"];
[request setPostValue:@"Hello twitpic!" forKey:@"message"];
[request startSynchronous];

NSError* error = [request error];
if (!error) {
NSString* response = [request responseString];
NSLog(@"%@", response);
} else {
NSLog(@"error: %@", error);
}


実行してみよう。ID, パスワードを入力する。
Login を押すとリクエストが飛ぶ。ログを見るとうまく行っているようだ。

KeychainSample2[3461:80f] updated keychain item
KeychainSample2[3461:80f] filepath=/Users/hashi/development/SampleCode/KeychainSample2/build/Debug/KeychainSample2.app/Contents/Resources/sample.jpg
KeychainSample2[3461:80f]
 111...
 1254....
 1bh2pu
 http://twitpic.com/1bh2pu



Twitpic のページを表示してみる。

出た。ちょっとうれしい。