iphone - Retrieving a filename for an ALAsset -
how can filename extracted alasset?
is there way via url or other way?
update: yeonsh notes below, ios 5.0 there better way. answer relevant ios < 5.0.
you can extract url alasset, filenames same, on form
assets-library://asset/asset.jpg?id=1000000001&ext=jpg
if reason need different file names, try making internal-external paradigm:
#import <foundation/foundation.h> @interface nsurl (nsurl_asset) - (nsurl*) toexternalform; - (nsurl*) fromexternalform; - (nsstring*) toexternalfilename; @end #import "nsurl+asset.h" #import "urlparser.h" // http://iphone.demay-fr.net/2010/04/parsing-url-parameters-in-a-nsstring/ static nsstring *const external_token = @"/assetexternalform/"; @implementation nsurl (nsurl_asset) // assets-library://asset/asset.jpg/assetexternalform/1000000001.jpg -> assets-library://asset/asset.jpg?id=1000000001&ext=jpg - (nsurl*) fromexternalform { if([self.scheme isequaltostring:@"assets-library"]) { nsrange slash = [self.absolutestring rangeofstring:external_token options:nsbackwardssearch]; if(slash.location != nsnotfound) { nsrange dot = [self.absolutestring rangeofstring:@"." options:nsbackwardssearch]; if(dot.location != nsnotfound) { nsstring* extention = [self.absolutestring substringfromindex:(dot.location + dot.length)]; nsstring* identifier = [self.absolutestring substringwithrange:nsmakerange(slash.location + slash.length, dot.location - (slash.location + slash.length))]; return [nsurl urlwithstring:[nsstring stringwithformat:@"%@?id=%@&ext=%@", [self.absolutestring substringtoindex:slash.location], identifier, extention]]; } } } return self; } // assets-library://asset/asset.jpg?id=1000000001&ext=jpg -> assets-library://asset/asset.jpg/assetexternalform/1000000001.jpg - (nsurl*) toexternalform { if([self.scheme isequaltostring:@"assets-library"]) { nsrange range = [self.absolutestring rangeofstring:@"?"]; if(range.location != nsnotfound) { urlparser *parser = [[[urlparser alloc] initwithurlstring:self.absolutestring] autorelease]; nsstring* extention = [parser valueforvariable:@"ext"]; nsstring* identifier = [parser valueforvariable:@"id"]; if(extention != null && identifier != null) { return [nsurl urlwithstring:[nsstring stringwithformat:@"%@%@%@.%@", [self.absolutestring substringtoindex:range.location], external_token, identifier, extention]]; } } } return self; } // assets-library://asset/asset.jpg?id=1000000001&ext=jpg -> 1000000001.jpg - (nsstring*) toexternalfilename { if([self.scheme isequaltostring:@"assets-library"]) { nsrange range = [self.absolutestring rangeofstring:@"?"]; if(range.location != nsnotfound) { urlparser *parser = [[[urlparser alloc] initwithurlstring:self.absolutestring] autorelease]; nsstring* extention = [parser valueforvariable:@"ext"]; nsstring* identifier = [parser valueforvariable:@"id"]; if(extention != null && identifier != null) { return [nsstring stringwithformat:@"%@.%@", identifier, extention]; } } } return null; } @end
note not need filename read content of alasset. use alasset.defaultrepresentation.getbytes method that.
Comments
Post a Comment