2013-12-03 6 views
0

Я использую следующий код для загрузки изображения на свой сервлет.iOS: Загрузка изображения на сервер не открывается

NSData *data = [NSData dataWithData:UIImagePNGRepresentation([UIImage imageNamed:@"jesus.png"])]; 
    NSString *urlString = @"http://localhost:8080/MyServlet/MyServlet?filename=jesus.png"; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:[NSURL URLWithString:urlString]]; 
    [request setHTTPMethod:@"POST"]; 

    NSString *boundary = @"_187934598797439873422234"; 
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

    NSMutableData *body = [NSMutableData data]; 
    [body appendData:[[NSString stringWithFormat:@"Content-Length %d\r\n\r\n", [data length] ] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 


    [body appendData:[NSData dataWithData:data]]; 

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


    [request setHTTPBody:body]; 
    [request addValue:[NSString stringWithFormat:@"%d", [body length]] forHTTPHeaderField:@"Content-Length"]; 


    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@", returnString); 

Его получение загружено изображение и сохранение этого изображения в конкретном рабочем столе Mac. Но, когда я пытаюсь открыть это изображение, он говорит: «Файл не может быть открыт, он может быть поврежден или использовать формат файла, который Preview не распознает».

Я видел, что файл изображения имеет нужный размер.

В чем причина невозможности открыть этот файл изображения после загрузки с моего клиента iOS? Может кто-нибудь, пожалуйста, предложите мне?

спасибо.

ответ

0

Она решается путем иметь код простым, как показано ниже.

NSString *urlString = [NSString stringWithFormat:@"http://localhost:8080/MyServlet/MyServlet?filename=myimage"]; 
NSData *data = [NSData dataWithData:UIImagePNGRepresentation([UIImage imageNamed:@"jesus.png"])]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 


[request addValue:@"image/png" forHTTPHeaderField:@"Content-Type"]; 

NSMutableData *body = [NSMutableData data]; 
[body appendData:[NSData dataWithData:data]]; 
[request setHTTPBody:body]; 

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 

NSLog(@"Ret: %@",returnString); 
1

Я думаю, что вам нужно начать тело с границей, а не с длиной содержания.

Попробуйте это:

NSMutableData *body = [NSMutableData data]; 
[body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Length %d\r\n\r\n", [data length] ] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[NSData dataWithData:data]]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
+0

Привет, Я пробовал, как вы предлагали, но та же проблема. – Stella

Смежные вопросы