Загрузка файла не работает через HTTP Post - PullRequest
0 голосов
/ 19 июля 2011

Эта функция предназначена для загрузки UIImage в веб-форму для каждого сообщения HTTP.Я использовал выдержки из некоторых постов здесь и на других сайтах и ​​в конце концов дошел до этого.

Но это не работает, работает как GET-метод для URL, по крайней мере, для меня.Не могли бы вы также протестировать его или помочь мне, где может быть ошибка?

Я не хочу использовать фреймворк, такой как ASIHTTPRequest, пожалуйста.

- (NSString *)postImage:(UIImage *)image toURL:(NSURL *)url {
NSData *imageData = UIImagePNGRepresentation(image);
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
NSString *boundary = [NSString stringWithFormat:@"---------------------------%i", (int)[[NSDate date] timeIntervalSinceReferenceDate]*100];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];

NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"Photo\"; filename=\"ipodfile.png\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: image/png\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
[request addValue:[NSString stringWithFormat:@"%d", body.length] forHTTPHeaderField: @"Content-Length"];

NSURLResponse *response = NULL;
NSError *requestError = NULL;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&requestError];
return [[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] autorelease];    
}

Спасибо, Vincento

Ответы [ 3 ]

0 голосов
/ 19 июля 2011

Вы уверены, что отправляемое изображение не равно нулю?Если вы пытаетесь отправить пустые данные POST, они будут изменены обратно на GET.

0 голосов
/ 19 июля 2011
   - (void) postCommentsWithImage : message : (NSString*)message imageData : (NSData*)data
           {
       NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];

    [theRequest setHTTPMethod:@"POST"];


    [theRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];


    if(data)
    {

        NSString* pictureDataString = [NSData encode:data];
        [dataDictionary setObject:pictureDataString forKey:@"imagebyte"];
    }
    else 
            {
        [dataDictionary setObject:@"" forKey:@"imagebyte"];
    }

    NSString *theBodyString = [dataDictionary JSONRepresentation];

    [dataDictionary release];

    NSData *theBodyData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding];   
    [theRequest setHTTPBody:theBodyData];  

    [theRequest setHTTPBody:theBodyData];  

    NSLog(@"theRequest=%@", theRequest);
    self.connection = [[NSURLConnection alloc] initWithRequest:theRequest    delegate:self];

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

}

0 голосов
/ 19 июля 2011

Кажется, все в порядке. (Все в порядке на стороне сервера)? Я поместил рабочий пример на http://code.developwithus.com/iphone/upload-image-and-data-with-iphone-sdk/, вы попробуете это?

...