Загрузить файл на сервер с IPhone с помощью ASIHTTPRequest - PullRequest
2 голосов
/ 21 июля 2010

Я пытался загрузить файл ( 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 дней подряд.

Заранее спасибо Nik

Ответы [ 2 ]

4 голосов
/ 21 марта 2011

Попробуйте это:

[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" в вашем запросе

0 голосов
/ 21 июля 2010

Есть ли несоответствие в именах полей, которые вы используете?

Похоже, вы используете "файл" на iphone:

[request setPostValue:@"login.zip" forKey:@"file"];  

но «загружено» на сервер:

$target = $target . basename( $_FILES['uploaded']['name']) ; 

Попробуйте изменить их так же.

...