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]
菜鸟提问,这样的上传功能要实现需要什么权限或设置么?
不用的 ,我上面的错误就是乱填充了一些不必要的头部选项

浙公网安备 33010602011771号