[英]How to upload the images to server?
NSMutableDictionary *files = [[NSMutableDictionary alloc] init];
UIImage *imageFromImageView = userpic.image;
NSData *data1 = UIImageJPEGRepresentation(imageFromImageView, 0.8);
if ([data1 length]>0) {
[files setValue:data1 forKey:@"photo"];
}
NSString *urlString =@"http://chkdin.com/dev/api/user/update_user?";
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
NSString *parameterString=[NSString stringWithFormat:@"skey=%@&user_id=%@&first_name=%@&last_name=%@&designation=%@&company=%@&display_name=%@&photo=%@",@"XXXXXXXX",[[NSUserDefaults standardUserDefaults]objectForKey:@"UserId"],FirstNameString,LastNameString,DesignationString,OrganizationString,displayname,files];
NSLog(@"%@",parameterString);
[request setHTTPMethod:@"POST"];
[request setURL:url];
[request setValue:parameterString forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
NSData *postData = [parameterString dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:postData];
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
[activityIndicatorView stopAnimating];
} else {
NSLog(@"%@ %@", response, responseObject);
}
}];
[dataTask resume];
这是我试过的代码,这里用户选择的图像我上传到服务器但图片没有上传。 在这里用户选择的图像我转换为文件格式,然后我发送到服务器。 你能帮我解决一下代码中的问题吗?
您应该使用multipart / form-data将文件上传到服务器。 尝试这个:
NSMutableDictionary *params=[NSMutableDictionary dictionary];
[params setObject:@"sa6rw9er7twefc9a7dvcxcheckedin" forKey:@"skey"];
[params setObject:[[NSUserDefaults standardUserDefaults]objectForKey:@"UserId"] forKey:@"user_id"];
[params setObject:FirstNameString forKey:@"first_name"];
[params setObject:LastNameString forKey:@"last_name"];
[params setObject:DesignationString forKey:@"designation"];
[params setObject:OrganisationString forKey:@"company"];
[params setObject:displayname forKey:@"display_name"];
NSError *error = nil;
NSData *jsonData=[NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[jsonData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://chkdin.com/dev/api/user/update_user"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:180];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
//Post value as form data
NSMutableData *body = [NSMutableData data];
NSString *boundary = @"---------------------------14737800031466499882746641949";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; charset=utf-8; boundary=%@", boundary];
[request addValue:contentType forHTTPHeaderField:@"Content-Type"];
[params enumerateKeysAndObjectsUsingBlock:^(NSString *parameterKey, NSString *parameterValue, BOOL *stop) {
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", parameterKey] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"%@\r\n", parameterValue] dataUsingEncoding:NSUTF8StringEncoding]];
}];
//Image upload part
UIImage *imageFromImageView = userpic.image;
NSData *dataImage = UIImageJPEGRepresentation(imageFromImageView, 0.8);
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: attachment; name=\"photo\"; filename=\"%@\"\r\n",@"photoname"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: image/jpg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:dataImage];
[body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
//close the form
[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
[activityIndicatorView stopAnimating];
} else {
NSLog(@"%@ %@", response, responseObject);
}
}];
[dataTask resume];
尝试这个:
NSMutableDictionary *files = [[NSMutableDictionary alloc] init];
UIImage *imageFromImageView = userpic.image;
NSData *data1 = UIImageJPEGRepresentation(imageFromImageView, 0.8);
if ([data1 length]>0) {
[files setValue:data1 forKey:@"photo"];
}
NSString *Datestr = [self dateStringJPG];
NSString *str=@"http://chkdin.com/dev/api/user/update_user?";
NSString *parameterString=[NSString stringWithFormat:@"skey=%@&user_id=%@&first_name=%@&last_name=%@&designation=%@&company=%@&display_name=%@&photo=%@",@"sa6rw9er7twefc9a7dvcxcheckedin",[[NSUserDefaults standardUserDefaults]objectForKey:@"UserId"],FirstNameString,LastNameString,DesignationString,OrganizationString,displayname,files];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
NSString *BoundaryConstant = @"----------V2ymHFg03ehbqgZCaKO6jy";
NSString* FileParamConstant = @"file";
NSURL* requestURL = [NSURL URLWithString:str];
request = [[NSMutableURLRequest alloc] init];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[request setHTTPShouldHandleCookies:NO];
[request setTimeoutInterval:60];
[request setHTTPMethod:@"PUT"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", BoundaryConstant];
[request setValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
NSData *imageData = UIImageJPEGRepresentation(image, 0.5);
if (imageData) {
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", BoundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\n", FileParamConstant] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"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", BoundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]];
NSData *postData = [parameterString dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:postData];
NSString *postLength = [NSString stringWithFormat:@"%d", [body length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setURL:requestURL];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue currentQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if(data.length > 0)
{
NSLog(@"success jpg %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}
else
{
NSLog(@"---xxerror %@-%@",data,error);
}
}];
-(void)sendDataToServer
{
indicators.hidden=NO;
[indicators startAnimating];
NSUserDefaults*defaults=[NSUserDefaults standardUserDefaults];
dict = [defaults objectForKey:@"Ucountry"];
NSMutableDictionary* _params = [[NSMutableDictionary alloc] init];
[_params setObject:[dict objectForKey:@"id"] forKey:@"userId"];
[_params setObject:@"" forKey:@"address"];
[_params setObject:txtCity.text forKey:@"city"];
[_params setObject:@"" forKey:@"country"];
[_params setObject:txtemail.text forKey:@"emailId"];
[_params setObject:txtFullName.text forKey:@"firstName"];
[_params setObject:txtPhoneNumber.text forKey:@"mobile"];
[_params setObject:txtState.text forKey:@"state"];
[_params setObject:txtZipCode.text forKey:@"zipcode"];
DLog(@"data=====>%@",_params);
[_params setObject:@"editprofile" forKey:@"action"];
NSString *BoundaryConstant = @"----------V2ymHFg03ehbqgZCaKO6jy";
NSString* FileParamConstant = @"image";
NSURL* requestURL = [NSURL URLWithString:BaseURL];
// create request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[request setHTTPShouldHandleCookies:NO];
[request setTimeoutInterval:30];
[request setHTTPMethod:@"POST"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", BoundaryConstant];
[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", BoundaryConstant] 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
if (imageData) {
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", BoundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\n", FileParamConstant] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"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", BoundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]];
// setting the body of the post to the reqeust
[request setHTTPBody:body];
// set the content-length
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[body length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
// set URL
[request setURL:requestURL];
NSURLResponse *response = nil;
NSError *requestError = nil;
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&requestError];
if (requestError == nil)
{
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:returnData options:kNilOptions error:&requestError];
dict=json;
DLog(@"data=====>%@",dict);
if ([[dict objectForKey:@"status"] isEqualToString:@"Success"]==TRUE)
{
[hud hideAnimated:YES];
NSUserDefaults *defUser = [NSUserDefaults standardUserDefaults];
[defUser setObject:[dict objectForKey:@"response"]forKey:@"Ucountry"];
[defUser synchronize];
UIStoryboard*storyboard=[AppDelegate storyBoardType];
DashboardVC*dsvc=(DashboardVC*)[storyboard instantiateViewControllerWithIdentifier:@"DashboardVCId"];
[self.navigationController pushViewController:dsvc animated:YES];
}else{
[hud hideAnimated:YES];
}
}
}
-(void)Open_Camera{
#if TARGET_IPHONE_SIMULATOR
NSLog(@"No Camera is set up in Simulator");
#else
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:picker animated:YES completion:NULL];
#endif
}
-(void)Open_Library{
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.delegate=self;
imagePicker.navigationBar.tintColor=[UIColor whiteColor];
imagePicker.allowsEditing = YES;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
[self presentViewController:imagePicker animated:YES completion:nil];
}
else{
[self presentViewController:imagePicker animated:YES completion:nil];
}
}
-(void)selectphoto{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:YES completion:NULL];
}
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *img = [info objectForKey:UIImagePickerControllerOriginalImage];
imgView.image =img;
NSLog(@"image user png is -----<%@",imgView.image);
if(imgView==nil)
{
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"OOPS" message:@"No Image Foundy "
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *actionOk = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:nil];
[alertController addAction:actionOk];
[self presentViewController:alertController animated:YES completion:nil];
}
else
{
imageData=[self compressImage:img];
[picker dismissViewControllerAnimated:YES completion:nil];
}
return;
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissViewControllerAnimated:YES completion:NULL];
}
-(NSData *)compressImage:(UIImage *)image1 {
float actualHeight = image1.size.height;
float actualWidth = image1.size.width;
float maxHeight = 500.0;
float maxWidth = 500.0;
float imgRatio = actualWidth/actualHeight;
float maxRatio = maxWidth/maxHeight;
float compressionQuality = 0.5;
if(imgRatio < maxRatio){
imgRatio = maxHeight / actualHeight;
actualWidth = maxWidth;
actualHeight = maxHeight;
}
else if(imgRatio > maxRatio){
imgRatio = maxWidth / actualWidth;
actualHeight = maxHeight;
actualWidth = maxWidth;
}
else{
actualHeight = maxHeight;
actualWidth = maxWidth;
}
CGRect rect = CGRectMake(0.0, 0.0, actualWidth, actualHeight);
UIGraphicsBeginImageContext(rect.size);
[image1 drawInRect:rect];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
imageData = UIImageJPEGRepresentation(img, compressionQuality);
UIGraphicsEndImageContext();
return imageData;
}
-(IBAction)actionSheetForCameraAndGalleryClick:(id)sender{
UIAlertController*alertAction=[UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *action=[UIAlertAction actionWithTitle:@"Camera" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
[self Open_Camera];
}];
UIAlertAction *action1=[UIAlertAction actionWithTitle:@"Gallery" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
[self Open_Library];
}];
UIAlertAction *cancelAlert=[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
[self dismissViewControllerAnimated:YES completion:nil];
}];
[alertAction addAction:action];
[alertAction addAction:action1];
[alertAction addAction:cancelAlert];
[self presentViewController:alertAction animated:YES completion:nil];
}
- (IBAction)CameraOpena:(id)sender {
[self Open_Camera];
}
- (IBAction)GalleryOpen:(id)sender {
[self Open_Library];
}
使用Afnetworking编写这样的api Request方法...
-(void)apiRequestImageUploadWithCompleteBlock:(NSString *)methodName methodParameters:(NSDictionary *)methodParameters imageName:(NSString *)imageName uploadImageData:(NSData *)uploadImageData inputParameters:(NSDictionary *)inputParameters completeBlock:(RTDictionaryResponseBlock)completeBlock failBlock:(RTFailBlock)failBlock
{
AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
//AFHTTPSessionManager *session = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
session.requestSerializer = [AFJSONRequestSerializer serializer];
[session.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
//--------------------------------------------------------------------------------------
NSString *URL_String = [NSString stringWithFormat:@"%@",baseUrl];
NSDictionary *params = @{
@"securitykey”:@“”,
@"fc":@"",
@"module":@""
};
NSMutableDictionary *dict_parameters=[params mutableCopy];
[dict_parameters addEntriesFromDictionary:inputParameters];
//Add method parameters
[dict_parameters addEntriesFromDictionary:methodParameters];
[session POST:URL_String parameters:dict_parameters constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[formData appendPartWithFileData:uploadImageData name:@"image" fileName:imageName mimeType:@"image/png"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *dataObj = (NSDictionary *)responseObject;
completeBlock(dataObj);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%s :%@",__PRETTY_FUNCTION__,error.description);
failBlock();
}];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.