简体   繁体   中英

Converting an iPhone IOS Video File Uploader to work with a file stored in document directory

This is my first real project. I have an app that captures several seconds of video using AVFoundation, outputs this to a file in the documents directory and lets the user preview the video before they upload it using HTTP and a PHP script on my website.

All the video capture and preview work perfectly but I am stuck on uploading the video file.

I learnt a lot from this simpleSDK video which shows how to achieve the desired effect using a video file stored in the apps main bundle.

The code from the tutorial that set up videoData ready to upload originally looked like this:

NSData *videoData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Movie" ofType:@"mov"]];
NSString *urlString = @"http://www.iphonedevnation.com/video-tutorial/upload.php";

The filename of the video file that I need to upload is always unique and generated using CFUUIDCreateString. I join this string to the path for the documents directory, add ".mov" to the end of it and save it into a text file for retrieving later.

This all works as I am able to retrieve the filename from the file and use it to preview the movie clip elsewhere in the app.

My path is in an NSString, that I have tried converting to NSURL and removing the file suffix to get it to work with the NSData *videoData.........line but it doesn't compile, I get an "No known class method for selector 'dataWithContentsOfFile:ofType.' error. I am targeting iOS 5 and using Xcode 4.3 with ARC and Storyboards.

I've been at this for best part of 5 hours now so hopefully someone can help. My code, which included tips from elsewhere on converting from a NSString to NSURL follows:

NSString *content = [[NSString alloc] initWithContentsOfFile:lastSavedTalentFilenamePath 
              usedEncoding:nil
              error:nil];

NSLog(@"content=%@",content);

//Need to now remove the '.mov' file type identifier
NSString *shortContent= [content substringToIndex:[content length]-4];
NSLog(@"***************shortContent***************%@", shortContent);

NSURL *convertedContent = [NSURL fileURLWithPath:shortContent];
NSLog(@"***************convertedContent***********%@",convertedContent);

NSData *videoData = [NSData dataWithContentsOfFile:convertedContent ofType:@"mov"];];

There is no NSData method called dataWithContentsOfFile:ofType:

The methods available are:

+ dataWithContentsOfFile:
+ dataWithContentsOfFile:options:error:

both of which take the file location as an NSString so there's not need to convert to an NSURL

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM