我如何通过XML解析将视频上传到Web服务?

时间:2010-10-12 08:51:34

标签: iphone

这是我用来将视频上传到网络服务器的代码

-(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];

}

1 个答案:

答案 0 :(得分: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];
        }

    }
}