2013-03-16 168 views
0

我想从iphone(从imagepicker)上传图像到我的服务器(使用PHP脚本)。但是,如何从imagepicker/ImageView将图像上传到脚本中?将iOS设备的图像文件从objective-c上传到PHP

这里是我的数据库连接代码:

NSString *brugernavn = [[NSUserDefaults standardUserDefaults] stringForKey:kBrugernavn]; 
    NSString *maaltid = self.maaltid.text; 
    //NSString *rating = [segmentedControl titleForSegmentAtIndex:[segmentedControl selectedSegmentIndex]]; 
    //NSString *rating = self.rating; 
    NSString *kommentar = self.kommentar.text; 
    NSString *place = self.place.text; 

    NSData *data = [NSData dataWithContentsOfFile:filepath]; 

    NSMutableString *urlString = [[NSMutableString alloc] initWithFormat:@"brugernavn=%@&&maaltid=%@&&kommentar=%@&&place=%@&&thumbnail=%@&&submit",brugernavn,maaltid,kommentar,place,data]; 
    [urlString appendFormat:@"%@", data]; 
    NSData *postData = [urlString dataUsingEncoding:NSASCIIStringEncoding 
           allowLossyConversion:YES]; 
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 
    NSString *baseurl = @"http://example.com/upload.php"; 

    NSURL *url = [NSURL URLWithString:baseurl]; 

    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url]; 
    [urlRequest setHTTPMethod: @"POST"]; 
    [urlRequest setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [urlRequest setValue:@"application/x-www-form-urlencoded" 
     forHTTPHeaderField:@"Content-Type"]; 
    [urlRequest setHTTPBody:postData]; 

    NSURLConnection *connection = [NSURLConnection connectionWithRequest:urlRequest delegate:self]; 
    [connection start]; 

这里是我的imagepicker代码:

// KAMERA - Aktiverer kameraet ved tryk på knap 
- (IBAction)useCamera:(id)sender { 
    if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
    { 
     UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
     imagePicker.delegate = self; 
     imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
     imagePicker.mediaTypes = @[(NSString *) kUTTypeImage]; 
     imagePicker.allowsEditing = NO; 
     [self presentViewController:imagePicker animated:YES completion:nil]; 
     _newMedia = YES; 
    } 
} 

// KAMERA - Aktiverer kamerarullen ved tryk på knap 
- (IBAction)useCameraRoll:(id)sender { 
    if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) 
    { 
     UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
     imagePicker.delegate = self; 
     imagePicker.SourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
     imagePicker.mediaTypes = @[(NSString *) kUTTypeImage]; 
     imagePicker.allowsEditing = NO; 
     [self presentViewController:imagePicker animated:YES completion:nil]; 
     _newMedia = NO; 
    } 
} 

// KAMERA - Sender valgt billede til imageView 
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    NSString *mediaType = info[UIImagePickerControllerMediaType]; 
    [self dismissViewControllerAnimated:YES completion:nil]; 

    if([mediaType isEqualToString:(NSString *)kUTTypeImage]) 
    { 
     UIImage *image = info[UIImagePickerControllerOriginalImage]; 
     _imageView.image = image; 
     if (_newMedia) 
      UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:finishedSavingWithError:contextInfo:), nil); 
    } else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) 
    { 
     // Code here to support video if enabled 
    } 
} 

在这里,从我的.h文件中的ImageView:

@property (strong, nonatomic) IBOutlet UIImageView *imageView; 

这里是我在PHP上的上传字段的定义:

$_FILES['thumbnail']['name'] 

用户应该从摄像头中选择一张图片,然后写上上传的标题,描述等信息,然后用PHP脚本上传服务器上的图片和信息。

请大家帮帮我:O)

回答

0

它已经有一段时间,因为我用这个,但后来它的工作:)

NSData *imageData = UIImagePNGRepresentation(bilden); 

NSString *filename = [NSString stringWithFormat:@"bild%d%@", bildnr,@".png"]; 
NSString *urlString = @"http://extranet.pool.se/stockholmsmassan/rita_pa_vaggen/sparabild.php"; 

// setting up the request object now 
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSString *boundary = @"---------------------------14737809831466499882746641449"; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
[request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

NSMutableData *body = [NSMutableData data]; 

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n", filename] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[@"Content-Type: image/png\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:imageData]; 

// second parameter information 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[@"Content-Disposition: form-data; name=\"epost\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[epost dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r \n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

// setting the body of the post to the reqeust 
[request setHTTPBody:body]; 

// now lets make the connection to the web 
NSURLResponse* response; 
NSError* error; 
NSData* result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

NSString *returnString = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]; 
NSLog(@"return: %@",returnString); 
+0

但“比尔登”和“bildnr” - 你是如何设置他们?现在我只是在imageView中获得我的照片!上面的Se代码... – 2013-03-17 07:43:22

+0

- 它下面是:o) – 2013-03-17 08:06:18

+0

Bilden是一个UIImage,所以你可以使用你的“图像”。 Bildnr无关紧要,因为无论你喜欢什么,你都可以打电话给你的文件。 – Sten 2013-03-18 08:05:23