Не удалось загрузить изображение на сервер ios

Привет, я пытаюсь загрузить изображение с моего устройства IOS на сервер.

И вот мой код для загрузки изображения

- (IBAction)btnUpload:(id)sender { if (self.imageViewGallery.image == nil) { UIAlertView *ErrorAlert = [[UIAlertView alloc] initWithTitle:@"Wait" message:@"Please Select An Image To Upload." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [ErrorAlert show]; NSLog(@"error"); } else{ NSData *imageData = UIImageJPEGRepresentation(self.imageViewGallery.image, 90); NSString *urlString = @"http://localhost/ColorPicker/api.upload.php"; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:urlString]]; [request setHTTPMethod:@"POST"]; NSString *boundary = @"---------------------------14737809831466499882746641449"; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; NSString *imgName = LIbraryImage; NSLog(@"image name : %@",imgName); NSMutableData *body = [NSMutableData data]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"files\"; filename=\"%@\"\r\n", imgName]] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[NSData dataWithData:imageData]]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [request setHTTPBody:body]; NSLog(@"setRequest : %@", request); NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; NSLog(@"returnstring is : %@",returnString); } 

Теперь вот мой код на стороне сервера. Это немного длиннее.

  <?php $Image = $_FILES['files']['name']; print_r($_FILES); foreach ($Image as $f => $name) { $allowedExts = array("gif", "jpeg", "jpg", "png"); $temp = explode(".", $name); $extension = end($temp); if ((($_FILES['files']['type'][$f] == "image/gif") || ($_FILES['files']['type'][$f] == "image/jpeg") || ($_FILES['files']['type'][$f] == "image/jpg") || ($_FILES['files']['type'][$f] == "image/png")) && ($_FILES['files']['size'][$f] < 2000000) && in_array($extension, $allowedExts)) { if ($_FILES['files']['error'][$f] > 0) { echo "Return Code: " . $_FILES['files']['error'][$f] . "<br>"; } else { if (file_exists("upload/" . $name)) { } else { move_uploaded_file($_FILES['files']['tmp_name'][$f], 'upload/' . uniqid() . "_" . $name); } } } else { $error = "Invalid file"; } } ?> 

Теперь, что происходит каждый раз, когда я пытаюсь загрузить, это предупреждение

 <b>Warning</b>: Invalid argument supplied for foreach() in <b>/Applications/XAMPP/xamppfiles/htdocs/ColorPicker/uploadAction.php</b> on line <b>5</b><br /> 

    Когда вы загружаете данные изображения в виде multipart, оно заканчивается в $_FILES . Начиная с PHP 4.3.0, $_REQUEST больше не содержит никакой информации о файлах, загруженных таким образом.

    Остальная часть вашего кода основана на идее, что изображение не загружается как multipart, а вместо этого загружается как строка base-64 в стандартной форме. Вместо того, чтобы записывать данные базы 64 в файл, вам просто нужно получить информацию о файле из $_FILES и перенести его в целевой каталог с помощью move_uploaded_file .

    Из комментариев, что print_r возвращается:

     Array ( [files] => Array ( [name] => iphone.jpg [type] => application/octet-stream [tmp_name] => /Applications/XAMPP/xamppfiles/temp/php4VsKOv [error] => 0 [size] => 13484 ) ) 

    Между тем, ваш код делает это:

     $Image = $_FILES['files']['name']; print_r($_FILES); foreach ($Image as $f => $name) { 

    Вы обрабатываете $_FILES['files']['name'] как если бы это был массив, когда это не так. Вот почему PHP говорит «Недопустимый аргумент для foreach ()»

    Обратите внимание, что он может стать массивом, если несколько файлов загружаются с тем же именем элемента формы. Это, безусловно, самая $_FILES вещь о $_FILES .

    Ваш код загрузки не пытается использовать синтаксис PHP, необходимый для загрузки нескольких файлов одновременно, поэтому вашему PHP-коду не нужно беспокоиться о том, что содержимое внутреннего массива является массивом. Вы можете исключить цикл foreach и все ссылки на индекс [$f] .