Загрузите файл на сервер из IPhone с помощью ASIHTTPRequest

Я пытался загрузить файл ( 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']) ; 

Попробуйте изменить их, чтобы они были одинаковыми.