2010-10-12 79 views
1

这是我使用的视频上传到网络服务器的代码如何通过XML解析将视频上传到Web服务?

-(void)startParsingForVedioUploade:(NSMutableDictionary*)vedioDict{ 

    NSURL *videoURL = [vedioDict valueForKey:@"VideoUrl"]; 

    NSData *myData = [[NSData alloc] initWithContentsOfURL:videoURL]; 

    NSString *urlString = [NSString stringWithFormat:@"http://www.Example.com/uploadvideoxml.php?user_id=%@",[vedioDict valueForKey:@"user_id"]]; 
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
    [request setURL:[NSURL URLWithString:urlString]]; 
    [request setHTTPMethod:@"POST"]; 
    NSString *boundary = [NSString stringWithString:@"---------------------------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 stringWithString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n",[myWords lastObject]]] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[NSData dataWithData:myData]]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [request setHTTPBody:body]; 
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:returnData];  
    [xmlParser setDelegate:self]; 
    [xmlParser parse]; 
} 

-(void)uploadeVideoClicked{ 

    UIImagePickerController *ipc = [[UIImagePickerController alloc] init]; 

    ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 

    ipc.mediaTypes =[UIImagePickerController availableMediaTypesForSourceType:ipc.sourceType];  

    ipc.delegate = self; 

    [self presentModalViewController:ipc animated:YES]; 

} 



#pragma mark ----------------------------- 
#pragma mark Image Picker Delegate Methods 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSMutableDictionary *)info 

{ 

    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; 

    if ([mediaType isEqualToString:@"public.image"]){ 

     UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"" message:@"You Select a image Please select Movie" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [myAlertView show]; 
     [myAlertView release]; 
    } 

    else if ([mediaType isEqualToString:@"public.movie"]){ 

     NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL]; 

     NSLog(@"found a video"); 

     NSData *webData = [NSData dataWithContentsOfURL:videoURL]; 
     [info setValue:webData forKey:@"VideoUrl"]; 
     [info setValue:[[mAppDelegate.userInfoArray objectAtIndex:1]valueForKey:@"user_id"] forKey:@"user_id"]; 
     [[pParsing sharedInstance] assignSender:self]; 
     [[pParsing sharedInstance] startParsingForVedioUploade:info]; 
    } 

    [picker dismissModalViewControllerAnimated:YES]; 

} 

回答

0
-(void)uploadeVideoClicked{ 

    if (_picker) { 
     [_picker dismissModalViewControllerAnimated:NO]; 
     [_picker.view removeFromSuperview]; 
     [_picker release]; 
    } 
    if (_popover) { 
     [_popover dismissPopoverAnimated:NO]; 
     [_popover release]; 
    } 
    _picker = [[[UIImagePickerController alloc] init] retain]; 
    _picker.delegate = self; 
    _picker.editing = NO; 
    _picker.allowsEditing=NO; 
    _picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    _picker.wantsFullScreenLayout = YES; 

    _picker.videoQuality =UIImagePickerControllerQualityTypeLow; 
    _picker.mediaTypes =[NSArray arrayWithObject:(NSString *)kUTTypeMovie]; 
    _popover = [[[UIPopoverController alloc] initWithContentViewController:_picker] retain]; 
    [_popover setDelegate:self]; 
    [_popover presentPopoverFromRect:infoButton.frame 
           inView:self.view 
      permittedArrowDirections:UIPopoverArrowDirectionAny 
          animated:YES]; 
} 
#pragma mark ----------------------------- 
#pragma mark Image Picker Delegate Methods 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 

    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; 

    if ([mediaType isEqualToString:@"public.image"]){ 


UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"" message:@"You Select a image Please select Movie" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 

     [myAlertView show]; 

     [myAlertView release]; 

    } 
    else if ([mediaType isEqualToString:@"public.movie"]){ 

     NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL]; 
     //NSLog(@"found a video"); 
     if (webData) { 
      [webData release]; 
      webData = nil; 
     } 

    webData = [[NSMutableData alloc]initWithContentsOfURL:videoURL]; 

     // webData = [NSData dataWithContentsOfURL:videoURL]; 

     spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 

     spinner.center = self.view.center; 

     [self.view addSubview:spinner]; 

     [spinner startAnimating]; 

    [self performSelector:@selector(uploadVideo) withObject:nil afterDelay:.001]; 

    } 

    [_picker dismissModalViewControllerAnimated:YES]; 
    [_picker.view removeFromSuperview]; 
    [_picker release]; 
    _picker = nil; 
    [_popover dismissPopoverAnimated:YES]; 
    [_popover release]; 

} 
-(void)uploadVideo 
{ 

NSString *url = [NSString stringWithFormat:@"http://example.com/uploadvideoxml.php"]; 

    networkQueue = [[ASINetworkQueue alloc] init]; 

    [networkQueue cancelAllOperations]; 

    [networkQueue setShowAccurateProgress:YES]; 

    [videoUploadProgressView setHidden:NO]; 

    progressView.center = self.view.center; 

    [self.view addSubview:progressView]; 

    [networkQueue setUploadProgressDelegate:videoUploadProgressView]; 

    [networkQueue setDelegate:self]; 

    [networkQueue setRequestDidFinishSelector:@selector(requestFinished:)]; 

    [networkQueue setRequestDidFailSelector: @selector(requestFailed:)]; 


    request= [[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:url]] ; 

    [request setPostValue:[[mAppDelegate.userInfoArray objectAtIndex:1]valueForKey:@"user_id"] forKey:@"user_id"]; 

    [request addRequestHeader:@"Content-Type" 
         value:@"multipart/form-data;boundary=---------------------------1842378953296356978857151853"]; 


    NSDate *date1=[NSDate date]; 

    NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init]; 

    [formatter1 setDateFormat:@"hh:mm"]; 

    NSString *valuestr = [formatter1 stringFromDate:date1]; 

    ////NSLog(@"%@",valuestr); 

    [formatter1 release]; 

    NSString *moviename = [NSString stringWithFormat:@"WakeUUUP_%d_%@.mov",[videolistArray count],valuestr]; 
    if(webData != nil){ 
     [request setFile:webData withFileName:moviename andContentType:@"video/quicktime" forKey:@"userfile"]; 
    } 

    [request setTimeOutSeconds:5000]; 
    //NSLog(@"%@",request); 
    [networkQueue addOperation:request]; 
    [networkQueue go]; 
} 
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 
{ 
    [_picker dismissModalViewControllerAnimated:YES]; 
    [_picker.view removeFromSuperview]; 
    [_picker release]; 
    _picker = nil; 
    [_popover dismissPopoverAnimated:YES]; 
    [_popover release]; 
} 

//for Ipad UIPopoverController if there is a cancel when the user click outside the popover 
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController 
{ 
    [_picker dismissModalViewControllerAnimated:YES]; 
    [_picker.view removeFromSuperview]; 
    [_picker release]; 
    _picker = nil; 
} 

#pragma mark ------------------------- 
#pragma mark ASIHTTPREQUEST Delegate 
- (void)requestFailed:(ASIHTTPRequest *)req 
{ 

    [progressView removeFromSuperview]; 
    [videoUploadProgressView setHidden:YES]; 
    ////NSLog(@"Request failed: %@",[req error]); 
    UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Failed to Post Item" message:[[req error] description] delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil, nil]; 
    [errorAlert show]; 
    [errorAlert release]; 
    [networkQueue release]; 
    [request release]; 
} 
- (void)requestFinished:(ASIHTTPRequest *)req 
{ 
    [networkQueue release]; 
    [request release]; 
    [progressView removeFromSuperview]; 
    [videoUploadProgressView setHidden:YES]; 

    [[Parsing sharedInstance] assignSender:self]; 
    NSMutableArray *resultArray =[[[NSMutableArray alloc]initWithArray:[[Parsing sharedInstance]startparsingforfun:[req responseData]]]autorelease]; 

    NSLog(@"Response was: %@",resultArray); 
    if (spinner) { 
     [spinner stopAnimating]; 
     [spinner removeFromSuperview]; 
     [spinner release]; 
     spinner = nil; 
    } 
    if ([[[resultArray objectAtIndex:1]objectForKey:@"Transaction"]isEqualToString:@"uploadvideoxml"]) { 
     if ([[[resultArray objectAtIndex:1]objectForKey:@"success"]isEqualToString:@"true"]) { 
      [self viewWillAppear:YES]; 

     }else { 

      UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Failed to Update Profile" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil, nil]; 
      [errorAlert show]; 
      [errorAlert release]; 
     } 

    } 
}