通过POST方法以objective-c的文件格式将语音和图像与文本数据一起上传到服务器的最简单方法是啥?

Posted

技术标签:

【中文标题】通过POST方法以objective-c的文件格式将语音和图像与文本数据一起上传到服务器的最简单方法是啥?【英文标题】:What is the simplest way to upload a voice and image to server in a file format in objective-c through POST method along with text data?通过POST方法以objective-c的文件格式将语音和图像与文本数据一起上传到服务器的最简单方法是什么? 【发布时间】:2016-07-21 11:24:54 【问题描述】:

这是我迄今为止尝试过的:

-(void)postMethod_Param 
    
     NSString *urlString=@"http://192.168.1.139:49/api//Grievance/PostCreateRequest";
     NSString *bodydata =[NSString stringWithFormat:@"&user_fb_id=%@&status=%d",fbUserId,status];


【问题讨论】:

我编辑了我的答案兄弟,它现在可以正常工作了。 Sitaram naidu 你用过我的代码吗? 【参考方案1】:

如果你想将数据发布到服务器

从图库中选择图像并将其保存到数组中

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

  UIImage *image=[info objectForKey:@"UIImagePickerControllerOriginalImage"];
  imageView.image=image;
  [arrayImage addObject:image];
  picker.delegate =self;
  [picker dismissViewControllerAnimated:YES completion:nil];

用于将图像保存为路径并转换为路径作为字符串

for (UIImage *img in array_Image)

  int i=0;
  NSString *pathName =nil;
  NSString *file_name = [[self getCurrentDate]stringByAppendingString:[self getCurrentTime]];
  file_name =[file_name stringByAppendingPathExtension:@"jpeg"];
  NSArray *paths1 =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *basePath =([paths1 count] >i) ? [paths1 objectAtIndex:i] : nil;
  NSString *path = [basePath stringByAppendingPathComponent:@"Photo"];
  //Get Directory in FileManager
  NSFileManager *fileManager =[NSFileManager defaultManager];
  if ([fileManager fileExistsAtPath:path])
    return;
  [fileManager createDirectoryAtPath:path  withIntermediateDirectories:NO attributes:nil error:nil];
  pathName =[path stringByAppendingPathComponent:file_name];
  NSData *imgData =UIImageJPEGRepresentation(image, 0.4);
  [imgData writeToFile:pathName atomically:YES];
  [arryImagePath addObject:pathName];

我在文件名中调用以下方法

+(NSString*)getCurrentTime

  //Get Current Time for saving Images
  NSString *path =nil;
  NSDateFormatter *timeFormatter =[[NSDateFormatter alloc]init];
  [timeFormatter setDateFormat:@"HH:mm:ss.SSS"];
  NSDate *now = [[NSDate alloc]init];

  NSString *str_time = [timeFormatter stringFromDate:now];
  NSString *curr_time;
  curr_time =[str_time stringByReplacingOccurrencesOfString:@"." withString:@""];

  path = [NSString stringWithFormat:@"%@",curr_time];

  return  path;

+(NSString*)getCurrentDate

  NSString *today =nil;

  NSDateFormatter *dateFormatter1;
  dateFormatter1 =[[NSDateFormatter alloc]init];
  [dateFormatter1 setDateFormat:@"d MMM yyyy"];
  NSDate *now =[[NSDate alloc]init];
  NSLocale *usLocale =[[NSLocale alloc]initWithLocaleIdentifier:@"en_US"];
  [dateFormatter1 setLocale:usLocale];
  NSString *str_date =[dateFormatter1 stringFromDate:now];
  today=[NSString stringWithFormat:@"%@",str_date];
  return today;

在上面的代码中,打印arryImagePath可以看到图片的路径,在此之前需要分配并初始化arryImagePath和array_image。

用于将数据发布到服务器

NSURL *url = [NSURL URLWithString:urlString];
NSString *output = [NSString stringWithContentsOfURL:url encoding:0 error:&error];
NSLog(@"%@",output);
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[url standardizedURL]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[postData dataUsingEncoding:NSUTF8StringEncoding]];

NSData *strJsondata=[NSData dataWithBytes:[output UTF8String] length:[output length]];
//If the response is dictionary......
NSDictionary *responseDict = strJsondata ? [NSJSONSerialization JSONObjectWithData:strJsondata options:0 error:&error] : nil;

【讨论】:

如何将图像和语音剪辑转换为文件格式并上传到服务器我已成功从文本字段发送文本,但我无法将图像和语音剪辑提交到服务器 从图库中我需要以文件格式将图像提交到服务器【参考方案2】:

要在服务器上上传文件,您需要发出多部分请求,我建议您使用AFNetworking 来执行此操作! 如果您需要一些使用 AFNetworking 的多部分示例,您可以查看 this 或 (Upload an image with AFNetworking 2.0) 链接。 希望这个链接可以帮助你。

更新 : 要将图像和语音上传到服务器,您需要将它们转换为数据文件,他是如何将图像转换为数据并上传到服务器的方法:

 NSData *imageData = UIImageJPEGRepresentation(selectedImage, 1.0f);

那么你需要提出一个请求:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:stringURL parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) 
    // If you have image you need to do this :
    NSString *fileName = @"Some name";
    if (imageData) [formData appendPartWithFileData:imageData name:@"photo" fileName:fileName mimeType:@"image/jpeg"];

 success:^(AFHTTPRequestOperation *operation, id responseObject) 
    // Everything is ok
    NSLog(@"Success (%d): %@\n\n", (int) operation.response.statusCode, responseObject);
    if (success) success(responseObject);

 failure:^(AFHTTPRequestOperation *operation, NSError *error) 

    // Ops ! we have error
    NSLog(@"Failure (%d): %@\n\n", (int) operation.response.statusCode, [error localizedDescription]);
    if (failure) failure(nil);
];

重要:注意mime Type和name,它们必须是服务器请求的相同名称和类型。

【讨论】:

以上是关于通过POST方法以objective-c的文件格式将语音和图像与文本数据一起上传到服务器的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ruby Regex 以特定格式为每个文件查找多个 Objective-C 注释

iOS JSON解析Objective-C并传递POST方法参数

Objective-C:如何从 POST 方法返回响应?

如何从网站以 xml 格式获取数据并使用 Objective-c 解析该数据以执行操作

springMVC访问静态文件如json文件,只能以get方法访问吗?为啥我前台ajax访问用的是post都被拒绝了?

Objective-C Mach-O文件格式深入理解