【问题标题】:POST image to PHP web service in IOS将图像发布到 IOS 中的 PHP Web 服务
【发布时间】:2017-10-13 19:31:32
【问题描述】:

我制作了一些图像视图及其下方的按钮。当用户从图库中选择图像时,它会显示在图像视图上。现在我希望通过 PHP Web 服务将该图像发送到服务器并使用 POST 方法。我希望它首先将其转换为 base64 位。谁能帮我? 我的代码是 NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"ddMMyyyyHHmmss"];

NSData *data = UIImageJPEGRepresentation(_img1.image, 1.0);
UIImage *imagedata = [UIImage imageWithData:data];

NSString * base64String = [data base64EncodedStringWithOptions:0];
NSDate *now = [[NSDate alloc] init];
NSString *theDate = [dateFormat stringFromDate:now];

//---------- Compress photo----------
double compressionRatio = 1;
int resizeAttempts = 5;
while ([data length] > 1000 && resizeAttempts > 0)
{
    resizeAttempts -= 1;
    compressionRatio = compressionRatio*0.6;
    data = UIImageJPEGRepresentation(imagedata,compressionRatio);

}

NSString *baseurl = @"myurl";
NSURL *dataURL = [NSURL URLWithString:baseurl];

NSMutableURLRequest *dataRqst = [NSMutableURLRequest requestWithURL:dataURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:500.0];
[dataRqst setHTTPMethod:@"POST"];

NSString *stringBoundary = @"0xKhTmLbOuNdArY---This_Is_ThE_BoUnDaRyy---pqo";
NSString *headerBoundary = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary];

[dataRqst addValue:headerBoundary forHTTPHeaderField:@"Content-Type"];

NSMutableData *postBody = [NSMutableData data];

// -------------------- ---- image Upload Status -----------------------
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image\"; filename=\"%@\"\r\n",[NSString stringWithFormat:@"%@.jpeg",theDate]] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:data];
[postBody appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"--%@--\r\n", stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[dataRqst setHTTPBody:postBody];

self.conn = [[NSURLConnection alloc] initWithRequest:dataRqst delegate:self];

 //SubmitDetailsViewController *presales = [self.storyboard instantiateViewControllerWithIdentifier:@"SubmitDetailsViewController"];
// [self.navigationController pushViewController:presales animated:YES];

}

pragma mark NSURLConnection 委托方法

  • (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { self->recieveData = [[NSMutableData alloc] init]; }

//------------- 来自服务器的响应 ------------- - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [ self->recieveData appendData:data];

NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data
                                                     options:kNilOptions
                                                       error:&error];

}

【问题讨论】:

标签: ios objective-c


【解决方案1】:

您可以使用AFNetworking 库来执行此操作。将AFNetworking 添加到您的项目并将AFNetworking.h 导入您的课程,然后您可以执行类似的操作,

  UIImageView *imageView;  // your image view

NSData *imgData = UIImageJPEGRepresentation(imageView.image, 1.0);

NSString *base64ImageStr = [imgData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

NSString *strToSend = [base64ImageStr stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];

NSDictionary *parameters = @{@"yourServerKeyOrParameterForImage" : strToSend};  // you can add other parameters as well

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

[[manager POST:@"your url" parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

    NSLog(@"your response : %@",responseObject);

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

    NSLog(@"error : %@",error.localizedDescription);

}]resume];

【讨论】:

  • 您想以multipart form data 还是base64string 发送图像?因为您编辑的问题显示了表单数据的尝试,而您之前的问题是询问 bas64 !!!
  • base64 字符串。 @狮子
  • 那就用我的答案吧!
  • 如果我想发送多张图片怎么办? @狮子
  • 然后转换 base64String 中的每个图像并将该字符串的数组发送到服务器或您的服务器接受的任何格式!基本上,您的服务器应该接受您的情况下的图像数组!因此,在您的参数字典中,您应该设置数组(字符串图像)而不是单个 strToSend
猜你喜欢
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多