2013-07-29 73 views
0

我對ios非常陌生。我必須從ios應用程序上傳圖片到其他服務器。我已經提到了stackoverflow。但是每次響應都是400,這是客戶端的不好要求。我正在從設備文檔目錄中獲取圖像。是否有人可以發佈圖像上傳的確切代碼。請參閱我正在使用的代碼。因爲我從文檔目錄下載圖像,所以我不確定要使用什麼文件名。從ios上傳圖片時出現錯誤400

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

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


     NSMutableData *body = [NSMutableData data]; 
     [body appendData:[[NSString stringWithFormat:@"--%@\r\n", stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:@"Content-Disposition:attachment; name=\"userfile\"; filename=\"image.png\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

     [body appendData:pngImageData]; 
     [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:@"--%@--\r\n", stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [request setHTTPBody:body]; 


NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
     NSString *str = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
     NSLog(@"return Data ---- %@", str); 
+1

你看着AFNetworking? https://github.com/AFNetworking/AFNetworking他們有很多方法可以讓不同的網絡請求變得容易,我從來沒有遇到下載或上傳圖像的問題。值得期待。 – Jsdodgers

回答

0

試試這個:

// create request 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];          
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData]; 
[request setHTTPShouldHandleCookies:NO]; 
[request setTimeoutInterval:30]; 
[request setHTTPMethod:@"POST"]; 

// set Content-Type in HTTP header 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 
[request setValue:contentType forHTTPHeaderField: @"Content-Type"]; 

// post body 
NSMutableData *body = [NSMutableData data]; 

// add params (all params are strings) 
for (NSString *param in _params) { 
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", param] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"%@\r\n", [_params objectForKey:param]] dataUsingEncoding:NSUTF8StringEncoding]]; 
} 

// add image data 
NSData *imageData = UIImageJPEGRepresentation(imageToPost, 1.0); 
if (imageData) { 
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\n", FileParamConstant] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:imageData]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
} 

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

// setting the body of the post to the reqeust 
[request setHTTPBody:body]; 

// set URL 
[request setURL:requestURL]; 

希望它幫助!

0

先轉換的UIImage到NSData的如下

UIImage *image = [UIImage imageNamed:@"example.png"]; 
NSData *data = UIImagePNGRepresentation(image); 

NSData *imageData = UIImageJPEGRepresentation(imageToPost, 1.0); 

然後形成你的請求字符串

NSURL *url = [NSURL URLWithString:serverURL]; 

//Time out interval need to be tuned 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url 
                 cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 
[request setHTTPMethod:@"POST"]; 

[request setHTTPBody: [requestString dataUsingEncoding:NSUTF8StringEncoding]]; 
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){ 
    if (!data) 
    { 
     NSLog(@"Error downloading data: %@", error); 
     return; 
    } 
    NSError *error1; 
    NSDictionary *theDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error1]; 
    DLog(@"Data received :%@", theDict); 

}]; 
+0

對不起,它不工作.....幫我出去! – Rohini

+0

你得到的錯誤或迴應是什麼? –

相關問題