これは実際に私が作っていたよりも簡単だったに違いありません。フォームに必要なパラメーターを辞書に入れる例が見当たりませんでした。私のように明白なことを見るのに苦労している人が使用する例を持っているように、私はそれをレイアウトします.
以下のコードは、いくつかの例外を除いて、私の質問のリンクから直接コピーしたものです。
NSData *imageToUpload = UIImageJPEGRepresentation(uploadedImgView.image, 1.0);//(uploadedImgView.image);
if (imageToUpload)
{
NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:@"My Image Caption", @"caption", userId, @"pid", @"openSesame", @"token", @"users ip address", "ip", nil];
AFHTTPClient *client= [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://myServer"]];
NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"/uploadImage" parameters:parameters constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {
[formData appendPartWithFileData: imageToUpload name:@"file" fileName:@"temp.jpeg" mimeType:@"image/jpeg"];
}];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
{
NSDictionary *jsons = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil];
//NSLog(@"response: %@",jsons);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
if([operation.response statusCode] == 403)
{
//NSLog(@"Upload Failed");
return;
}
//NSLog(@"error: %@", [operation error]);
}];
[operation start];
}
最初に気付くのは、NSDictionary *parameters
. ここで、フォームに必要なパラメータを配置します。質問のフォームからわかるように、キャプション、pid、トークン、および ip パラメーターとそれぞれの値が必要でした。
フォームを見ると、言及しなかったパラメーターがもう 1 つあります。<input type="file" name="file" size="45"/>
特にこの行はどれですか。フォームのその部分は、このコード行によって処理されます。
[formData appendPartWithFileData: imageToUpload name:@"file" fileName:@"temp.jpeg" mimeType:@"image/jpeg"];
元の質問@"image"
にはname:
値がありました。フォームが@"file"
. 変更したら、すべてが正常に機能しました。
path:
パラメータ inmultipartFormRequestWithMethod:
が baseURL の末尾に追加されることに注意してください。そのため、リクエストは@"http://myserver/uploadImage"
フォームのアクションで必要に応じて送信されます。
私が言ったように、これが私のような見落としがちな人にとって明白であることを願っています.