1

私はこの HTML フォーム投稿の初心者なので、AFNetworking を使用してこの HTML フォームを投稿に実装する方法を解読するのに苦労しています。アプリからサーバーに画像をアップロードする機能を追加する必要があります。誰かが私にこれを教えてくれませんか。

これが私が使用するHTMLフォームです。

        <form action="http://myserver/uploadImage" method="post" enctype="multipart/form-data">
            <input type="file" name="file" size="45"/>
            <input type="text" name="caption" size="80"/>
            <input type="submit" value="Upload It"/>
            <input type="hidden" name="pid" value="the user id"/>
            <input type="hidden" name="token" value="a token"/>
            <input type="hidden" name="ip" value="an IPaddress"/>
        </form>

以下のような例をたくさん見つけたので、使用する方法をよく理解しています。しかし、私にとっての切断は、上記の html フォームに含まれる各フィールドをどこにどのように配置するかです。
AFNetworking を使用して他のパラメーターと一緒に画像を送信する

4

1 に答える 1

1

これは実際に私が作っていたよりも簡単だったに違いありません。フォームに必要なパラメーターを辞書に入れる例が見当たりませんでした。私のように明白なことを見るのに苦労している人が使用する例を持っているように、私はそれをレイアウトします.

以下のコードは、いくつかの例外を除いて、私の質問のリンクから直接コピーしたものです。

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"フォームのアクションで必要に応じて送信されます。

私が言ったように、これが私のような見落としがちな人にとって明白であることを願っています.

于 2013-10-15T05:57:49.663 に答える