2013-03-15 81 views
1

我曾试图发布的压缩文件和一些参数的Web服务,但我得到的回应“失踪电子书文件”,因此如何发布zip文件和参数的ObjectiveC请帮我如何在ObjectiveC中发布(HTTP POST)zipfile和参数?

由于提前

我已经试过这样:

 NSString *urlString1 = [NSString stringWithFormat:@"http://www.EbookFile.com/index.php?q=api/upload&APPkey=dfsfwerwe324342323432"]; 



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

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

       // Parameter 1 

       [body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"uid\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[uid dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[[NSString stringWithString:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 


         // Parameter 2 

       [body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"title\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[titleText.text dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[[NSString stringWithString:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 

       // Parameter 3 


       [body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"token\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[token dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[[NSString stringWithString:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 

       // Parameter 4 


       [body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"desc\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[descText.text dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[[NSString stringWithString:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 

       // Parameter 5 


       [body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"cat\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[CatId dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[[NSString stringWithString:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 


     // ZIP File Post here 

       int r = arc4random() % 8000000; 
       NSString *RandomNumber = [NSString stringWithFormat:@"%d",r]; 
       NSString *file = [RandomNumber stringByAppendingString:@".zip"]; 

       NSData *Filedata = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:archivePath]]; // ZIP file convert to NAData here 

       [body appendData:[[NSString stringWithFormat:@"Content-Disposition: attachment; name=\"file\"; filename=\"%@\"\r\n",file] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:Filedata]; 
       [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [request setHTTPBody:body]; 

       // pointers to some necessary objects 
       NSHTTPURLResponse* response =[[NSHTTPURLResponse alloc] init]; 
       NSError* error = [[NSError alloc] init] ; 

       // synchronous filling of data from HTTP POST response 
       NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

       if (error) 
       { 
       } 

NSString *responseString = [[[NSString alloc] initWithBytes:[responseData bytes] 
                    length:[responseData length] 
                    encoding:NSUTF8StringEncoding] autorelease]; 

回答

0

我希望这可以帮助任何人。

NSString *urlString1 = [NSString stringWithFormat:@"http://www.efferwrwre.com/index.php?q=api/upload&key=f5746442fb9067b3fba83c3da0351f1f"]; 
    NSLog(@"URLSTribg : %@", urlString1); 
    NSString *ww = [urlString1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

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

    NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; 
    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 stringWithString:@"Content-Disposition: form-data; name=\"uid\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[uid dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 


    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"title\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[titleText.text dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 


    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"token\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[token dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 


    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"desc\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[descText.text dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 


    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"cat\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[CatId dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

    int r = arc4random() % 8000000; 
    NSString *RandomNumber = [NSString stringWithFormat:@"%d",r]; 
    NSString *file = [RandomNumber stringByAppendingString:@".zip"]; 

    NSData *Filedata = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:archivePath]]; 
    NSLog(@"file:%@",Filedata); 

    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"\r\n",file] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:Filedata]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [request setHTTPBody:body]; 

NSHTTPURLResponse* response =[[NSHTTPURLResponse alloc] init]; 
    NSError* error = [[NSError alloc] init] ; 

    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
    if (error) 
    { 

    } 

    NSString *responseString = [[[NSString alloc] initWithBytes:[responseData bytes] 
                 length:[responseData length] 
                 encoding:NSUTF8StringEncoding] autorelease]; 
    NSLog(@"%@", responseString); 
0

尝试发送文件的文件中这样

NSUInteger length = [myData length]; 
    NSData *filedata; 
     Byte *byteData = (Byte *)malloc(length); 
     [data getBytes:byteData length:length]; 


     [postbody appendBytes:(const void *)byteData length:length]; 
+0

感谢您的回复 – SampathKumar 2013-03-15 13:15:00

0

首先,有差异Web服务的不同风格,并且您还没有指定您正在处理的内容。它是基于SOAP的服务吗?休息? XML-RPC?为了讨论的缘故,我认为这是一个RESTful服务,因为这是大多数人最近看到的地方。

我看到的问题是,您试图将参数放在帖子的主体中。您必须查看您正在使用的特定API的文档,但通常会将参数作为您要发布的URL中的查询参数提供,或者通过请求中发送的标题指定。请求的主体应该是压缩数据。

+0

感谢您的回复 – SampathKumar 2013-03-15 13:17:35