Загрузка изображения iOS в PHP с помощью MKNetworkEngine - я знаю, что это работает, но не могу получить PHP для захвата
Я создал приложение для iOS, которое загружает изображение, снятое камерой, на сервер, используя MKNetworkEngine
, как описано в следующем руководстве. Если я назначу хост posttestserver.com, общедоступный сервер POST-тестирования, как следует из названия, он возвращает URL-адрес и путь к вновь загруженной фотографии. Успех!
Проблема: я не могу использовать свой собственный код PHP для захвата этого файла и сохранения его на моем веб-сервере. Я не понимаю, как posttestserver.com успешно его получает, но мой очень простой php - нет.
iOS сторона:
NSData *image = UIImageJPEGRepresentation([info objectForKey:UIImagePickerControllerOriginalImage], 0.1);
NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:
@"woody", @"userName", @"testPassword", @"password", nil];
//WORKS:
self.flUploadEngine = [[fileUploadEngine alloc] initWithHostName:@"posttestserver.com" customHeaderFields:dic];
//Doesnt work:
self.flUploadEngine = [[fileUploadEngine alloc] initWithHostName:@"camerademander.com" customHeaderFields:dic];
NSMutableDictionary *postParams = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"testApp", @"appID",
nil];
self.flOperation = [self.flUploadEngine postDataToServer:postParams path:@"/users/recieveStub3.php"];
[self.flOperation addData:image forKey:@"userfile" mimeType:@"image/jpg" fileName:@"upload.jpg"];
[self.flOperation addCompletionHandler:^(MKNetworkOperation* operation) {
NSLog(@"HTTP 200: success");
NSLog(@"%@", [operation responseString]);
}
errorHandler:^(MKNetworkOperation *errorOp, NSError* error) {
NSLog(@"%@", error);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:@"Dismiss"
otherButtonTitles:nil];
[alert show];
}];
[self.flUploadEngine enqueueOperation:self.flOperation];
PHP:
echo "Connected to server successfully.";
$uploaddir = '/photos/';
$file = basename($_FILES['userfile']['upload.jpg']);
$uploadfile = $uploaddir . $file;
if (move_uploaded_file($_FILES['userfile']['upload.jpg'], $uploadfile)) {
echo "Successfully uploaded! :{$file}:";
}
Это препятствует продвижению моего проекта вперед - я не понимаю, как posttestserver может получить результат, но я не понимаю, особенно когда я могу успешно подключиться к своему php и серверу.
Большое спасибо заранее!
2 ответа
На вашей стороне iOS измените ключ "userfl" на "userfile"
[self.flOperation addData:image forKey:@"userfile" mimeType:@"image/jpg" fileName:@"upload.jpg"];
На вашей стороне PHP, вы должны изменить свой код следующим образом:
echo "Connected to server successfully.";
$uploaddir = '/photos/';
$file = basename($_FILES["userfile"]["name"]);
$uploadfile = $uploaddir.$file;
if (move_uploaded_file($_FILES["userfile"]["tmp_name"], $uploadfile)) {
echo "Successfully uploaded! :{$file}:";
}
Я не программист PHP, после просмотра учебников по загрузке файлов PHP от w3schools, напишите ответ, надеюсь, это сработает:)
UPTATE:
Хорошо, обновил мой ответ, чтобы получить больше информации для вашего вопроса.(У меня есть тест на моем сервере, он работает хорошо)
- удалите фотографии, если выход
используйте код php ниже и посмотрите, что вы получите
if($_FILES){ $uploaddir = './photos/'; $file = basename($_FILES["userfile"]["name"]); $uploadfile = $uploaddir.$file; if(!file_exists($uploaddir)){ if(!mkdirs($uploaddir)){ echo "Fail to creat uploaddir"; exit(); } }else if( file_exists($uploadfile)){ echo "Upload file exists"; exit(); } if (move_uploaded_file($_FILES["userfile"]["tmp_name"], $uploadfile)) { echo "Successfully uploaded! :{$file}:"; }else{ echo "Failed uploaded! :{$file}:"; } }else { echo "Uploaded empty file"; } function mkdirs($dir, $mode = 0777) { if (is_dir ( $dir ) || @mkdir ( $dir, $mode )) return TRUE; if (!mkdirs ( dirname ( $dir ), $mode )) return FALSE; return @mkdir ( $dir, $mode ); }
Оказывается, это была проблема с разрешением сервера - я использовал echo $file, is_writable($file) ? ' is writable' : ' is NOT readable', "\n";
определить это.