0

次のコードを使用して、写真をWebサービスに送信しています。

-(void)uploadPhoto:(UIImage*)image :(NSString*)fileName
{

NSData *img = UIImageJPEGRepresentation(image, 0.9f);

NSString *urlString = @"http://serverURL.com";

NSMutableURLRequest *request= [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];

NSString *boundary = @"---------------------------14737809831466499882746641449";

NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];

NSMutableData *postbody = [NSMutableData data];

[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@.jpg\"\r\n",fileName] dataUsingEncoding:NSUTF8StringEncoding]];

[postbody appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

[postbody appendData:[NSData dataWithData:img]];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[request setHTTPBody:postbody];

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"%@", returnString);

}

これは正常に機能しており、PHPのサーバーから写真を取得できます。

私の質問は、form-dataを使用してサーバーに追加のデータを送信することは可能ですか?ユーザー名やその他のアプリケーション関連データなど、写真に関する詳細を送信する必要があります。

リクエストに追加のデータを追加するにはどうすればよいのでしょうか。通常のPOSTデータを追加しようとしましたが、機能しません。データ型が原因だと思います。

これがどのように機能するか、そしてサーバーに送信するリクエストにさらにデータを追加する方法があるかどうか混乱しています。

これに関するどんな助けも素晴らしいでしょう。

ありがとう!

4

2 に答える 2

1

サーバーに画像をアップロードする最良の方法の 1 つは、ASIFormDataRequestを使用することです。

別の追加 API を使用して、同じパラメータに対して複数の値を送信できます。

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request addPostValue:@"Ben" forKey:@"names"];
[request addPostValue:@"George" forKey:@"names"];
[request addFile:@"/Users/ben/Desktop/ben.jpg" forKey:@"photos"];
[request addData:imageData withFileName:@"george.jpg" andContentType:@"image/jpeg" forKey:@"photos"];

作業コードの場合 ASIFormDataRequest を使用してファイルをサーバーにアップロードします。使い方の一部...

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

[request setUseKeychainPersistence:YES];
// サイトが .htaccess で保護されている場合

//[request setUsername:@"login"];
//[request setPassword:@"password"];

NSString *fileName = [NSString stringWithFormat:@"ipodfile%@.jpg",self.fileID];
[request addPostValue:fileName forKey:@"名前"];

ASIFormDataRequest を使用してフォーム POST を送信するためのより良いアイデアを得るには。

于 2013-03-08T19:54:41.360 に答える
0

投稿内の変数ごとに次の行を繰り返すだけです。

[postbody appendData:[@"Content-Disposition: form-data; name=\"userfile\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

[postbody appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

[postbody appendData:[NSData dataWithData:img]];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

name明らかに、1 行目の値、2 行目のコンテンツ タイプ、3 行目の実際のデータを更新する必要があります。

于 2013-03-08T19:59:16.750 に答える