2013-03-16 75 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