Мой код iOS
UIImage *image = [UIImage imageNamed:@"Fb-button"];
NSData *imageData = UIImagePNGRepresentation(image);
AFHTTPSessionManager *sessionManager = [[AFHTTPSessionManager alloc]initWithBaseURL:@"baseurl"];
AFJSONResponseSerializer *jsonresponseSerilaizer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
jsonresponseSerilaizer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/plain",@"text/html", nil];
sessionManager.responseSerializer = jsonresponseSerilaizer ;
[sessionManager POST:@"pathurl" parameters:Nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData: imageData name:@"userfile" fileName:@"userfile.png" mimeType:@"png"];
} success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"success");
NSLog(@"response : %@",responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"error");
NSLog(@"error : %@",error);
}];
Ошибка, которую я получаю в xcode — ошибка какао 3840
error : Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x79865f70 {NSDebugDescription=Invalid value around character 0., NSUnderlyingError=0x798665c0 "Request failed: bad request (400)"}
Код PHP приведен ниже
$user_image = $_FILES['user_image']['name'];
$config['upload_path'] = './images/User_files/';
$config['allowed_types'] = 'gif|jpg|png';
$config['file_name'] = $user_image;
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
$data["error"] = array('error' => $this->upload->display_errors());
echo json_encode($data);
}
else
{
$data = array('upload_data' => $this->upload->data());
echo '{"success": "true"}';
}
А также я попробовал следующий код PHP:
if($_FILES['user_image']['size'] > 0)
{
$user_image = substr(number_format(time() * rand(), 0, '', ''), 0, 8);
if (preg_match('/^image\/p?jpeg$/i', $_FILES['user_image']['type']) or
preg_match('/^image\/gif$/i', $_FILES['user_image']['type']) or
preg_match('/^image\/jpg$/i', $_FILES['user_image']['type']) or
preg_match('/^image\/(x-)?png$/i', $_FILES['user_image']['type']))
{
if (preg_match('/^image\/p?jpeg$/i', $_FILES['user_image']['type']))
{
$ext = '.jpg';
}
else if (preg_match('/^image\/gif$/i', $_FILES['user_image']['type']))
{
$ext = '.gif';
}
else if (preg_match('/^image\/jpg$/i', $_FILES['user_image']['type']))
{
$ext = '.jpg';
}
else if (preg_match('/^image\/(x-)?png$/i', $_FILES['user_image']['type']))
{
$ext = '.png';
}
$user_image = $user_image.$ext;
$user_imagetoStore = './images/User_files/'.$user_image;
copy($_FILES['user_image']['tmp_name'],$user_imagetoStore);
}
else
{
$user_image= "";
}
}
Пара мыслей:
Код Objective-C использует поле с именем userfile
и фрагменты PHP используют user_image
,
Второй фрагмент кода PHP не генерирует никакого ответа JSON.
Я бы также предложил просто:
sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];
Это, вероятно, не имеет значения, но я бы также использовал nil
скорее, чем Nil
когда ты звонишь POST
метод.
Если вышеупомянутое не работает, я бы также предложил запустить это на симуляторе и посмотреть это в Чарльзе (http://charlesproxy.com) и посмотреть, если запрос выглядит нормально.
Других решений пока нет …