2011-01-03 5 views
0

私はあまりにも私のWebサービスと一つのビデオに一つの画像を投稿したいのですが、問題は、それがビデオパートに行くとき、それは私のOPASIHTTPRequestにビデオと画像を投稿する方法は?

に追加

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

networkQueue = [[ASINetworkQueue alloc] init]; 

[networkQueue cancelAllOperations]; 

[networkQueue setShowAccurateProgress:YES]; 

//[networkQueue setUploadProgressDelegate:progressBar]; 

[networkQueue setDelegate:self]; 

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

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


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

[request setPostValue:@"284" forKey:@"id"]; 

[request setPostValue:@"show" forKey:@"show"]; 

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

NSData *imgData=UIImageJPEGRepresentation(userImage, 0.9); 
if(imgData != nil){ 
    [request setFile:imgData withFileName:@"Loveatnight" andContentType:@"image/jpeg" forKey:@"image"]; 
} 

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



if(videoData != nil){ 
    [request setFile:videoData withFileName:@"Loveishard" andContentType:@"image/jpeg" forKey:@"uploadfile"]; 

}// error is come on that line 


[request setTimeOutSeconds:500]; 

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

[networkQueue addOperation:request]; 

[networkQueue go]; 

を過剰-悪いエラーを与えるということです私は私のビデオギbecuaseこれを使用

[request setFile:videoData withFileName:@"Loveishard" andContentType:@"video/quicktime" forKey:@"uploadfile"]; 

はMOVであるが、それは再びエラーにすべての

答えて

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://www.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]; 
     } 

    } 
} 

    enter code here 
0

まずを与え、あなたは何もありませんコンテンツタイプを正しく設定しないでください。 andContentType:@ "image/jpeg"を使用する代わりに、ビデオファイルに適合するcontentTypeを使用する必要があります。マルチメディアファイルのさまざまなMIMEタイプを確認するには、http://www.w3schools.com/media/media_mimeref.aspを参照してください。

そして、(あなたが.AVIファイルを持っている場合)は、例えば使用:

if(videoData != nil){ 
    [request setFile:videoData withFileName:@"Loveishard" 
          andContentType:@"video/x-msvideo" 
            forKey:@"uploadfile"]; 
}// error is come on that line 

SECOND:バイナリデータやファイルをアップロードする際、データはあなたが何であるかを、自動的に「マルチパート/フォームデータ」形式で掲載されています大文字と小文字の区別がないので、ヘッダーの設定については心配しないでください。

+0

:ご協力いただきありがとうございます私はこのメートを使用するが、再び過剰悪いエラー\t \t [要求setFile:ビデオデータwithFileName: "ビデオ/ QuickTimeの" forKey:@: "Loveishard" andContentType @ @」ファイルをアップロードする"]; – GhostRider

0

videoDataはどこですか?私はあなたのコードの中にそれへの参照が表示されません。

さらに、ビデオのコンテンツタイプとしてimage/jpegを提供しているのはなぜですか?私はあなたがvideo/mp4を意味する必要があります(または、おそらくvideo/mpegまたはvideo/quicktime、どこからビデオを取得しているかによって異なります)。 jcdmb @

+0

[要求セットファイル:videoData withFileName:@ "Loveishard" andContentType:@ "video/quicktime" forKey:@ "uploadfile"]; 私のビデオfor​​mateはmovなので、これを使うのですが、もう一度エラーが出る – GhostRider

+1

何のエラーが出ますか?エラーは何を言いますか? –

+0

ありがとうございました:videoDataにエラーがあり、別の関数に渡すとnullになりました。今度は画像とビデオの両方でアップロードしますtogther – GhostRider

0
 if (videoData) 
     { 

      [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
      NSString *temp=[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"video\"; filename=\"video.mp4\"\r\n"]; 
      [body appendData:[[NSString stringWithString:temp] dataUsingEncoding:NSUTF8StringEncoding]]; 
      NSLog(@"temp %@",temp); 

      [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
      [body appendData:[NSData dataWithData:videoData]]; 

      [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     }else{ 
      NSLog(@"NOT Data"); 

     } 
     videoData=nil; 

     [request setHTTPBody:body]; 
関連する問題