Fork me on GitHub

SOS强力求助—如何上传一个xml文件到一个服务器,并且得到服务器返回的数据。-已解

大家好!我想把一个本地的一个xml文件上传的指定的服务器上,并且取得服务器返回给我的数据。我用一个很简单的界面,就是一个按钮和一个textview。当我点击按钮时,开始发送我的xml文件到服务器,我们的程序把数据发送完成后得到服务器返回的数据,将其打印到textview上。但是我的程序得到的返回数据时bad request。大家帮我看看到底哪里错了,应该如何才能上传文件呢?
主要代码如下:
//URL
    NSString *urlString = @"http://synkontact.appspot.com/backup?name=myfirstbackup";
    NSString *filename = @"myFile";
    
    //初始化request
    NSMutableURLRequest *request= [[[NSMutableURLRequest alloc] init] autorelease];
    [request setURL:[NSURL URLWithString:urlString]];
    
    //请求方式为post
    [request setHTTPMethod:@"POST"];
    
    //填充http头
    NSString *boundary = @"-----------------------------5169208281820";
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];
    
    NSMutableData *postbody = [[NSMutableData alloc] init];
    [postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] 
                          dataUsingEncoding:NSUTF8StringEncoding]];
    [postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@.xml\"\r\n", filename] 
                          dataUsingEncoding:NSUTF8StringEncoding]];
    [postbody appendData:[[NSString stringWithString:@"Content-Type: text/xml\r\n\r\n"] 
                          dataUsingEncoding:NSUTF8StringEncoding]];
    
     //要发送的文件数据
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"myFile" ofType:@"xml"];
    NSData *data = [NSData dataWithContentsOfFile:filePath];        
    
    [postbody appendData:[NSData dataWithData:data]];
    [postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] 
                          dataUsingEncoding:NSUTF8StringEncoding]];
    
    //填充http头Content-Length"字段
    int addValueLength = [postbody length];
    NSString *length = [NSString stringWithFormat:@"%d",addValueLength];
    [request addValue:length forHTTPHeaderField: @"Content-Length"];
    [request setHTTPBody:data];
    
    //查看我们发送的http头
    NSDictionary *dic = [request allHTTPHeaderFields];
    NSArray *components =[dic allKeys];
    for (int i=0; i<[components count]; i++) 
    {
        NSString *select = [components objectAtIndex:i];
        NSString *filed = [dic objectForKey:select];
        NSLog(@"%@ : %@",select,filed);
    }
    
    //查看我们发送的数据部分
    NSString *string = [[NSString alloc] initWithData:postbody encoding:NSASCIIStringEncoding];
    NSLog(@"%@",string);

    //链接
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    //NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
    //将返回的data转换为字符串输出
    NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding (kCFStringEncodingGB_18030_2000); 
    NSString *rawString=[[NSString alloc]initWithData:returnData encoding:enc]; 
    
    textView.text = rawString;[appinfo]itunes地址[/appinfo][appinfo]itunes地址[/appinfo] [appinfo]itunes地址[/appinfo][appinfo]itunes地址[/appinfo][appinfo]itunes地址 [/appinfo]

[/lang][lang=objc]
[lang=objc][/lang]

 

菜鸟提问,这样的上传功能要实现需要什么权限或设置么?

不用的 ,我上面的错误就是乱填充了一些不必要的头部选项

 

posted on 2012-03-26 11:46  pengyingh  阅读(245)  评论(0)    收藏  举报

导航