2012-02-17 115 views
0

我正在嘗試將kml文件上傳到Google協作平臺。 API是這裏 - http://code.google.com/apis/sites/docs/1.0/developers_guide_protocol.html#UploadingFiles,他們給這個例 -http post將文件上傳到iphone上的谷歌網站

POST /feeds/content/domainName/siteName HTTP/1.1 
Host: sites.google.com 
GData-Version: 1.4 
Authorization: <your authorization header here> 
Content-Length: 7221984 
Content-Type: multipart/related; boundary=END_OF_PART 
--END_OF_PART 
Content-Type: application/atom+xml 

<entry xmlns="http://www.w3.org/2005/Atom"> 
<category scheme="http://schemas.google.com/g/2005#kind" 
term="http://schemas.google.com/sites/2008#attachment" label="attachment"/> 
<link rel="http://schemas.google.com/sites/2008#parent" type="application/atom+xml" 
href="https://sites.google.com/feeds/content/domainName/siteName/PARENT_ENTRY_ID"/> 
<title>PDF File</title> 
<summary>HR packet</summary> 
</entry> 

--END_OF_PART 
Content-Type: application/pdf 

... pdf contents here ... 

--END_OF_PART-- 

我試圖用NSMutableURLRequest執行這一職務。這裏是我的代碼 -

NSString *[email protected]"END_OF_PART";  
NSMutableString *bodyString = [[NSMutableString alloc]initWithCapacity:50]; 
[bodyString appendFormat:@"--%@\n",boundary]; 
[bodyString appendString:@"Content-Type: application/atom+xml\n"]; 
[bodyString appendString:@"<entry xmlns=\"http://www.w3.org/2005/Atom\">\n"]; 
[bodyString appendString:@"<category scheme=\"http://schemas.google.com/g/2005#kind\"\n"]; 
[bodyString appendString:@"term=\"http://schemas.google.com/sites/2008#attachment\" label=\"attachment\"/>\n"]; 
[bodyString appendString:@"<link rel=\"http://schemas.google.com/sites/2008#parent\" type=\"application/atom+xml\"\n"]; 
[bodyString appendString:@"href=\"https://sites.google.com/feeds/content/itourlocal/kmlfiles\"/>\n"]; 
[bodyString appendFormat:@"<title>%@.kml</title>\n",theNewTour.tourName]; 
[bodyString appendString:@"</entry>\n"]; 
[bodyString appendFormat:@"--%@\n",boundary]; 
[bodyString appendString:@"Content-Type: application/kml\n"]; 
NSString *kmlString=[KMLExporter kmlForPoints:self.theNewTour.locations andRoutes:polylines]; 
[bodyString appendFormat:@"%@\n",kmlString]; 
[bodyString appendFormat:@"--%@--",boundary]; 
NSData *postData = [bodyString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
NSString *postLength=[NSString stringWithFormat:@"%d",[postData length]];  
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:[NSURL URLWithString:@"https://sites.google.com/feeds/content/itourlocal/kmlfiles"]]; 
[request setHTTPMethod:@"POST"]; 
[request addValue:@"multipart/related; boundary=\"END_OF_PART\"" forHTTPHeaderField: @"Content-Type"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"sites.google.com" forHTTPHeaderField:@"Host"]; 
[request setValue:@"1.4" forHTTPHeaderField:@"GData-Version"]; 
[request setValue:[NSString stringWithFormat:@"GoogleLogin auth=%@",authString] forHTTPHeaderField:@"Authorization"]; 
NSLog(@"%@",authString); 
[request setHTTPBody:postData]; 
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request]; 

這裏是體字符串的整個文本被轉換成數據 -

--END_OF_PART 
Content-Type: application/atom+xml 
<entry xmlns="http://www.w3.org/2005/Atom"> 
<category scheme="http://schemas.google.com/g/2005#kind" 
term="http://schemas.google.com/sites/2008#attachment" label="attachment"/> 
<link rel="http://schemas.google.com/sites/2008#parent" type="application/atom+xml" 
href="https://sites.google.com/feeds/content/itourlocal/kmlfiles"/> 
<title>bar test.kml</title> 
</entry> 
--END_OF_PART 
Content-Type: application/kml 
<kml> <Document> <Placemark> <name>Mezzanine</name> <address>444 Jessie Street, San Francisco</address> <description>(null)</description> <Point> <coordinates>-122.408028,37.782402,0</coordinates> </Point> </Placemark><Placemark> <name>1015 Folsom</name> <address>1015 Folsom Street, San Francisco</address> <description>(null)</description> <Point> <coordinates>-122.405678,37.778072,0</coordinates> </Point> </Placemark><Style id='roadStyle'> <LineStyle> <color>7fcf0064</color> <width>6</width> </LineStyle></Style><Placemark> <styleURL>#roadStyle</styleURL> <LineString> <coordinates>-122.407997,37.782379 -122.409248,37.781399 -122.409248,37.781399 -122.408707,37.780979 -122.408157,37.780540 -122.407700,37.780170 -122.407158,37.779739 -122.406631,37.779308 -122.406158,37.778938 -122.405617,37.778500 -122.405617,37.778500 -122.406036,37.778172 -122.406036,37.778172 -122.405800,37.777981 </coordinates> </LineString> </Placemark></Document> </kml> 
--END_OF_PART-- 

此請求之前返回「多部分必須有Atom和媒體部分」

我已經嘗試了許多不同的變化,但不斷收到錯誤。任何建議,以獲得這一權利?謝謝。

回答

0

想通OUT- 我所需要的內容類型行之後添加第二換行符。不知道爲什麼,但它現在起作用。