Я пытался загрузить файл ( login.zip ) с использованием библиотек ASIHTTPRequest из IPhone на встроенный сервер Apache в Mac OS X Snow Leopard. Мой код:
NSString *urlAddress = [[[NSString alloc] initWithString:self.uploadField.text]autorelease]; NSURL *url = [NSURL URLWithString:urlAddress]; ASIFormDataRequest *request; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"login.zip"]; NSData *data = [[[NSData alloc] initWithContentsOfFile:dataPath] autorelease]; request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease]; [request setPostValue:@"login.zip" forKey:@"file"]; [request setData:data forKey:@"file"]; [request setUploadProgressDelegate:uploadProgress]; [request setShowAccurateProgress:YES]; [request setDelegate:self]; [request startAsynchronous];
Код php:
<?php $target = "upload/"; $target = $target . basename( $_FILES['uploaded']['name']) ; $ok=1; if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) { echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded"; } else { echo "Sorry, there was a problem uploading your file."; } ?>
Я не совсем понимаю, почему файл не загружается. Если бы кто-нибудь мог мне помочь. Я застрял на этом в течение 5 дней подряд.
Заранее спасибо
Попробуй это:
[request setFile:filePath forKey:@"file"];
или если вы можете поместить свой zip-файл в NSData, как это
NSData *zipData = [[NSData alloc] initWithContentsOfFile:zipName];
и отправить его на сервер с помощью
[request setData:zip forKey:@"file"];
на сервере попробуйте это
<?php $dir = "/var/www/your_directory/"; $path = $dir . $_FILES['file']['name']; //move_uploaded_file($_FILES['file']['tmp_name'], $path); if(move_uploaded_file($_FILES['file']['tmp_name'], $path)) { //return ok! :) } else { // return -> echo"There's been a problem uploading your file. Please try again"; } ?>
в $_FILES['file']['name']
['file']
ДОЛЖЕН быть таким же, как и forKey:@"file"
в вашем запросе
Есть ли несоответствие в именах полей, которые вы используете?
Похоже, вы используете «файл» на iphone:
[request setPostValue:@"login.zip" forKey:@"file"];
но «загружен» на сервер:
$target = $target . basename( $_FILES['uploaded']['name']) ;
Попробуйте изменить их, чтобы они были одинаковыми.