2014-11-06 49 views
1

我試圖上傳一些文本數據的圖像。但是,當我嘗試它僅用於圖片上傳。有用!但是對於param,我得到result = null。所以數據發送空。這是我的代碼。Multipart ImageUpload與IOS中的參數數據

-(void)uploadImage : (UIImage *)image : (NSString *)url : (NSString *)param 
{ 
NSLog(@"URL : %@", url); 
NSLog(@"param : %@", param); 
NSData *myData=UIImagePNGRepresentation(image); 
NSMutableURLRequest *request; 
NSString *urlString = url; 
NSString *filename = @"image"; 
request= [[NSMutableURLRequest alloc] init]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSDictionary *temp = @{@"result"  : @"rob" 
         }; 
//opening boundary 
NSString *boundary = @"---------------------------14737809831466499882746641449"; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
[request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 
NSMutableData *postbody = [NSMutableData data]; 
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
// [postbody appendData:[[NSString stringWithFormat:@"--%@--", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@.png\"\r\n", filename] dataUsingEncoding:NSUTF8StringEncoding]]; 
[postbody appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
[postbody appendData:[NSData dataWithData:myData]]; 
//params 
[postbody appendData:[ [temp description] dataUsingEncoding:NSUTF8StringEncoding]]; 

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

[request setHTTPBody:postbody]; 

NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
// conn.delegate = self; 
[conn start]; 

} 

可能任何專家幫我我失蹤了什麼?

回答

1

您可以使用類似AFNetworking的庫來處理您的所有請求。這非常簡單,使您的代碼更具可讀性。這裏有一個方法來創建與參數(https://github.com/AFNetworking/AFNetworking#creating-an-upload-task-for-a-multi-part-request-with-progress

NSDictionary *params = @{ 
    @"result" : @"rob" 
} 

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
     [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil]; 
    } error:nil]; 

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 
NSProgress *progress = nil; 

NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { 
    if (error) { 
     NSLog(@"Error: %@", error); 
    } else { 
     NSLog(@"%@ %@", response, responseObject); 
    } 
}]; 

[uploadTask resume]; 
+0

你可以解決它,而不庫幫助一個多文件上傳? – 2014-11-07 06:57:19