我无法为我的生活找出当我使用AFNetworking时为什么这不行.它与ASIHTTP合作.这对我来说都很新鲜但是我不知道为什么这些文件不再从$_FILES转移到服务器的HD.以下是iOS代码:
- (IBAction)uploadPressed { [self.fileName resignFirstResponder]; NSURL *remoteUrl = [NSURL URLWithString:@"http://mysite.com"]; NSTimeInterval timeInterval = [NSDate timeIntervalSinceReferenceDate]; NSString *photoName=[NSString stringWithFormat:@"%lf-Photo.jpeg",timeInterval]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString *documentsDirectory = [paths objectAtIndex:0]; // the path to write file NSString *filePath = [documentsDirectory stringByAppendingPathComponent:photoName]; NSData * photoImageData = UIImageJPEGRepresentation(self.remoteImage.image,1.0); [photoImageData writeToFile:filePath atomically:YES]; NSLog(@"photo written to path: e%@",filePath); AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:remoteUrl]; NSMutableURLRequest *afRequest = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/photos" parameters:nil constructingBodyWithBlock:^(id <AFMultipartFormData>formData) { [formData appendPartWithFormData:[self.fileName.text dataUsingEncoding:NSUTF8StringEncoding] name:@"name"]; [formData appendPartWithFileData:photoImageData name:self.fileName.text fileName:filePath mimeType:@"image/jpeg"]; } ]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:afRequest]; [operation setUploadProgressBlock:^(NSInteger bytesWritten,NSInteger totalBytesWritten,NSInteger totalBytesExpectedToWrite) { NSLog(@"Sent %d of %d bytes",totalBytesWritten,totalBytesExpectedToWrite); }]; [operation setCompletionBlock:^{ NSLog(@"%@",operation.responseString); //Gives a very scary warning }]; [operation start]; }
我曾经这样做:
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:remoteUrl]; [request setPostValue:self.fileName.text forKey:@"name"]; [request setFile:filePath forKey:@"filename"]; [request setDelegate:self]; [request startAsynchronous];
这是我的PHP:
{ // these could be stored in a .ini file and loaded // via parse_ini_file()... however,this will suffice // for an example $codes = Array( 100 => 'Continue',101 => 'Switching Protocols',200 => 'OK',201 => 'Created',202 => 'Accepted',203 => 'Non-Authoritative Information',204 => 'No Content',205 => 'Reset Content',206 => 'Partial Content',300 => 'Multiple Choices',301 => 'Moved Permanently',302 => 'Found',303 => 'See Other',304 => 'Not Modified',305 => 'Use Proxy',306 => '(Unused)',307 => 'Temporary Redirect',400 => 'Bad Request',401 => 'Unauthorized',402 => 'Payment required',403 => 'Forbidden',404 => 'Not Found',405 => 'Method Not Allowed',406 => 'Not Acceptable',407 => 'Proxy Authentication required',408 => 'Request Timeout',409 => 'Conflict',410 => 'Gone',411 => 'Length required',412 => 'Precondition Failed',413 => 'Request Entity Too Large',414 => 'Request-URI Too Long',415 => 'Unsupported Media Type',416 => 'Requested Range Not Satisfiable',417 => 'Expectation Failed',500 => 'Internal Server Error',501 => 'Not Implemented',502 => 'Bad Gateway',503 => 'Service Unavailable',504 => 'Gateway Timeout',505 => 'HTTP Version Not Supported' ); return (isset($codes[$status])) ? $codes[$status] : ''; } function sendResponse($status = 200,$body = '',$content_type = 'text/html') { $status_header = 'HTTP/1.1 ' . $status . ' ' . getStatusCodeMessage($status); header($status_header); header('Content-type: ' . $content_type); echo $body; } if (!empty($_FILES) && isset($_POST["name"])) { $name = $_POST["name"]; $tmp_name = $_FILES['filename']['tmp_name']; $uploads_dir = '/var/www/cnet/photos'; move_uploaded_file($tmp_name,"$uploads_dir/$name.jpg"); $result = array("SUCCEEDED"); sendResponse(200,json_encode($result)); } else { sendResponse(400,'Nope'); } ?>
尝试这段代码:
NSData* sendData = [self.fileName.text dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary *sendDictionary = [NSDictionary dictionaryWithObject:sendData forKey:@"name"]; AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:remoteUrl]; NSMutableURLRequest *afRequest = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/photos" parameters:sendDictionary constructingBodyWithBlock:^(id <AFMultipartFormData>formData) { [formData appendPartWithFileData:photoImageData name:self.fileName.text fileName:filePath mimeType:@"image/jpeg"]; } ]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:afRequest]; [operation setUploadProgressBlock:^(NSInteger bytesWritten,NSInteger totalBytesExpectedToWrite) { NSLog(@"Sent %d of %d bytes",totalBytesExpectedToWrite); }]; [operation setCompletionBlock:^{ NSLog(@"%@",operation.responseString); //Gives a very scary warning }]; [operation start];