0

現在、iphone アプリケーションで multipart/mixed リクエストを送信しようとしていますが、サービスは常に http ステータス コード 500 を返します。Web サービスのソース コードにアクセスできません。Android では、登録サービスは次のように呼び出されます。

HttpPost httpost = new HttpPost(PlayerUrl.REGISTER_URL);
    httpost.setHeader("Content-Type", "multipart/mixed");
    MultipartEntity entity = new MultipartEntity();

    String jsonData = "{\"firstName\":\"abc\",\"lastName\":\"xyz\",\"email\":\"abc@xyz.com\",\"password\":\"abc\",\"inviteType\":\"1\"}";

    StringBody jsonBean = new StringBody(jsonData, "application/json", null);

    entity.addPart("user", jsonBean);
    entity.addPart("image", new FileBody(new File(
    "/data/face.png"), "face.png",
    "application/octet-stream", null));

    httpost.setEntity(entity);

    HttpResponse response = client.execute(httpost);
    System.out.println(response);

しかし、iPhoneでそれを行う方法はわかりません。私は一日中検索しましたが、何も達成できませんでした。私は現在、次のコードを持っています:

 request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:url]];
    [request setHTTPMethod:method];

    //build body        
    NSMutableData *bodyForRequest = [NSMutableData data];

    //NSString *jsonData = [NSString stringWithFormat:@"%@", dataForJson];

    [request setHTTPMethod:@"POST"];
    NSString *boundary = @"91473780983146649988274664144";
    NSString *contentType = [NSString stringWithFormat:@"multipart/mixed; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];
    [request addValue:@"1.0" forHTTPHeaderField: @"MIME-Version"];

    [bodyForRequest appendData:[[NSString stringWithFormat:@"If you can see this MIME than your client doesn't accept MIME types!\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];



    [bodyForRequest appendData:[@"Content-Type: application/json;name = \"user\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [bodyForRequest appendData:[@"Content-Transfer-Encoding: 7bit\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    //[bodyForRequest appendData:[@"Content-ID: user\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    //[bodyForRequest appendData:[[NSString stringWithFormat:@"Content-Disposition: name=\"user\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];



    [bodyForRequest appendData:dataForJson];

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


    [bodyForRequest appendData:[@"Content-Type: image/jpg; name=\"image\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [bodyForRequest appendData:[@"Content-Transfer-Encoding: base64\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    //[bodyForRequest appendData:[@"Content-ID: image\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    NSString *str=[NSString stringWithFormat:@"Content-Disposition: attachment ;file=\"image.jpg\";\r\n\r\n"];

    [bodyForRequest appendData:[[NSString stringWithString:str] dataUsingEncoding:NSUTF8StringEncoding]];

    [bodyForRequest appendData:[NSData dataWithData:dataForImage]];


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


        [request setHTTPBody:bodyForRequest];

    // save request start time
    requestStartTime = [CNUtility currentTimeInMilliseconds];

    // _connection the request now
    NSLog(@"%@...request...%@",self,request);
    _connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    [_connection start];

私の要件は、プロファイル画像とともにJSONデータをサーバーに送信することです。助けてください。または、私に役立つ何かを提案してください。

また、私は ASI を使用することを許可されていないので、それ以外のことがあれば教えてください。

4

1 に答える 1

0

AFNetworking を使用して生活を楽にしてみてください。コードは、太字の重要な部分のようになります。

AFHTTPClient *httpClient       = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@", kUrl]]];

あなたにとって重要な部分 -- 開始

NSMutableURLRequest *afRequest = [httpClient multipartFormRequestWithMethod:@"POST"
                                                                       path:[NSString stringWithFormat:@"link?access_token=%@", kAPIToken]
                                   parameters:nil constructingBodyWithBlock:^(id <AFMultipartFormData>formData)
                                  {
                                      [formData appendPartWithFileData:videoData name:@"link[data]" fileName:@"filename.mov" mimeType:@"video/quicktime"];

                                      NSString  *tagStr  = @"#partytrain";
                                      NSData    *tagData = [tagStr dataUsingEncoding:NSUTF8StringEncoding];
                                      [formData appendPartWithFormData:tagData name:@"link[text]"];
                                  }];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:afRequest];

[operation setUploadProgressBlock:^(NSUInteger bytesWritten,long long totalBytesWritten,long long totalBytesExpectedToWrite)
 {
     //use a progress indicator here
     NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
 }];

[operation  setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Success");
    [picker dismissViewControllerAnimated:YES completion:nil];
}
                                  failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"error: %@",  operation.responseString);}];

[operation start];
于 2013-05-01T01:51:58.070 に答える