Отправка некоторых переменных помимо данных файла - PullRequest
0 голосов
/ 17 августа 2011

Я пытаюсь загрузить файл с помощью пост-запроса, но не могу добавить к нему другие переменные. Вот код:

NSMutableURLRequest *urlRequest =
      [NSMutableURLRequest requestWithURL:url];
   [urlRequest setHTTPMethod:@"POST"];
   [urlRequest setValue:
      [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundry]
      forHTTPHeaderField:@"Content-Type"];

NSString *post = @"key1=val1&key2=val2";
NSData *postVars = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];


   NSMutableData *postData =
      [NSMutableData dataWithCapacity:[data length]+[postVars length] + 512];
    [postData appendData:postVars];
   [postData appendData:
      [[NSString stringWithFormat:@"--%@\r\n", boundry] dataUsingEncoding:NSUTF8StringEncoding]];
   [postData appendData:
      [[NSString stringWithFormat:
        @"Content-Disposition: form-data; name=\"%@\"; filename=\"test.bin\"\r\n\r\n", FORM_FLE_INPUT]
       dataUsingEncoding:NSUTF8StringEncoding]];
   [postData appendData:data];
   [postData appendData:
      [[NSString stringWithFormat:@"\r\n--%@--\r\n", boundry] dataUsingEncoding:NSUTF8StringEncoding]];

   [urlRequest setHTTPBody:postData];

Ответы [ 3 ]

0 голосов
/ 18 августа 2011

Это может быть полезно для вас.

NSString *post = @"key1=val1&key2=val2";
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:@"http://www.nowhere.com/sendFormHere.php"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
0 голосов
/ 19 августа 2011

Ну, я нашел ответ, вам нужно указать каждую переменную между отдельными границами, как показано ниже:

-----------------------------153930311422 
Content-Disposition: form-data; name="var1" 
value1
 -----------------------------153930311422 

Итак, вот реализация target-c:

SString *boundary = [NSString stringWithString:@"-----------------------------153930311422 "];

NSMutableURLRequest *urlRequest =[NSMutableURLRequest requestWithURL:url];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundry]   forHTTPHeaderField:@"Content-Type"];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=var1 \r\n\r\n %@ \r\n\r\n",value1] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
0 голосов
/ 17 августа 2011

На сервере он должен написать код, который будет принимать переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...