2012-02-03 3 views
3

Я хочу, чтобы загрузить два изображения на сервер с помощью следующего кода может любой, пожалуйста, помогите мне, вот мой код для почтовых данныхКак загрузить несколько изображений без использования ASIHTTPRequest

- (void)uploadPath:(NSString*)path withOptions:(NSDictionary*)options withImageData1:(NSData*)data1 ofImageName1:(NSString *)imageName1 andImageData2:(NSData*)data2 ofImageName2:(NSString *)imageName2 { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    NSURL *url = [NSURL URLWithString:path relativeToURL:[NSURL URLWithString:baseURLString]]; 
    NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:90.0]; 

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

    [mutableRequest setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary] forHTTPHeaderField:@"Content-Type"]; 
    [mutableRequest setHTTPMethod:@"POST"]; 
    NSMutableData *postbody = [NSMutableData data]; 

    for(NSString *key in options) 
    { 
     NSString *value = [options objectForKey:key]; 
     [postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [postbody appendData:[value dataUsingEncoding:NSUTF8StringEncoding]]; 
    } 
    [postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

    //******************* Append 1st Image ************************/ 

    if ([imageName1 isEqualToString:@"picture1.jpg"]) { 
     [postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"picture1\"; filename=\"%@\"\r\n",imageName1] dataUsingEncoding:NSUTF8StringEncoding]]; 
    } 
    [postbody appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [postbody appendData:[NSData dataWithData:data1]]; 
    [postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    //******************* Append 1st Image ************************/ 

    //******************* Append 2nd Image ************************/ 

    if ([imageName2 isEqualToString:@"picture2.jpg"]) { 
     [postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"picture2\"; filename=\"%@\"\r\n",imageName2] dataUsingEncoding:NSUTF8StringEncoding]]; 
    } 
    [postbody appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [postbody appendData:[NSData dataWithData:data2]]; 

    //******************* Append 2nd Image ************************/ 

     [mutableRequest setHTTPBody:postbody]; 
    urlConnection = [[NSURLConnection alloc] initWithRequest:mutableRequest delegate:self]; 
    if (self.urlConnection) { 
     self.dataXml = [NSMutableData data]; 
    } 
    self.urlConnection = nil; 
    [mutableRequest release]; 
    [pool release]; 
} 
+0

Вы действительно не сказали, почему вы не используете или не можете использовать asihttprequest. есть ли у вас проблемы с этим? вы получаете сообщение об ошибке? –

+0

Привет, Джоэл, На самом деле мой проект не в том состоянии, что я могу изменить тип запроса. Он вот-вот закончится, но не может быть закончен только из-за этой функциональности загрузки 2 изображений. Пожалуйста, помогите мне. –

ответ

3

Одно решение, чтобы увидеть, что неправильно:

  1. сделать новый проект, используя ASIHttpRequest
  2. Получить веб-прокси отладки, как Charles
  3. Включите Чарльз (или что когда-либо), выполните многофайловую загрузку, которая будет успешной. Запись данных из HTTP-трафика на сервер.
  4. Теперь запустите свой собственный код. Запишите этот трафик. Чем отличается от ваш трафик на рабочий трафик? Делает ваш IDENTICAL во всех уважениях и как он не может работать?

Вы также можете заменить шаг (1) с curl командной строки, загружающего несколько файлов на сервер и записи, что трафик, но я не разбирался достаточно в curl сказать, с верхней части моей головы, что это команда будет выглядеть.

+0

Thanx Kendall, я попробую и вернусь сюда. –

+0

Используя Charles, я вижу, что мой код не может добавить данные второго изображения в запрос. и если я меняю положение 1-го изображения и 2-го изображения в своем коде, тогда он добавляет второе изображение, но не может добавить 1-е изображение в запросе. –

+0

Thanx @ Kendall, Чарльз потрясающий. Я должен использовать ASIHTTPRequest, но все в порядке ... Thanx много раз. –

1
- (NSString*) nameValString: (NSDictionary*) dict {//example CHLOVA_FORM_BOUNDARY is @"aaa" 
NSArray* keys = [dict allKeys]; 
NSString* result = [NSString string]; 
int i; 
for (i = 0; i < [keys count]; i++) { 
    result = [result stringByAppendingString: 
       [@"--" stringByAppendingString: 
       [CHLOVA_FORM_BOUNDARY stringByAppendingString: 
       [@"\r\nContent-Disposition: form-data; name=\"" stringByAppendingString: 
       [[keys objectAtIndex: i] stringByAppendingString: 
        [@"\"\r\n\r\n" stringByAppendingString: 
        [[dict valueForKey: [keys objectAtIndex: i]] stringByAppendingString: @"\r\n"]]]]]]]; 
} 

return result; 
} 

- (void)sendPhoto{ 
NSString *param = [self nameValString:dic];//dic is post info like {lat=36;lng=120;} 
NSString *footer = [NSString stringWithFormat:@"\r\n--%@--\r\n", CHLOVA_FORM_BOUNDARY]; 

param = [param stringByAppendingString:[NSString stringWithFormat:@"--%@\r\n", CHLOVA_FORM_BOUNDARY]]; 
param = [param stringByAppendingString:@"Content-Disposition: form-data; name=\"pic\";filename=\"image.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n"]; 

NSData *jpeg = UIImageJPEGRepresentation([UIImage imageWithContentsOfFile:_path], 0.55); 
//NSLog(@"jpeg size: %d", [jpeg length]); 

NSMutableData *data = [NSMutableData data]; 
//img one 
[data appendData:[param dataUsingEncoding:NSUTF8StringEncoding]]; 
[data appendData:jpeg]; 
[data appendData:[footer dataUsingEncoding:NSUTF8StringEncoding]]; 
//img two 
[data appendData:[param2 dataUsingEncoding:NSUTF8StringEncoding]]; 
[data appendData:jpeg2]; 
[data appendData:[footer2 dataUsingEncoding:NSUTF8StringEncoding]]; 

NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", CHLOVA_FORM_BOUNDARY]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
[request setHTTPShouldHandleCookies:NO]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:contentType forHTTPHeaderField:@"Content-Type"]; 
[request setValue:[NSString stringWithFormat:@"%d", [data length]] forHTTPHeaderField:@"Content-Length"]; 
[request setHTTPBody:data]; 
//then do sending 
} 
Смежные вопросы