Retrieving a filename for an ALAsset

匿名 (未验证) 提交于 2019-12-03 08:35:02

问题:

How can the filename be extracted from an ALAsset?

Is there a way to get this via the url or some other way?

回答1:

Update: As yeonsh notes below, from iOS 5.0 there is a better way. This answer is relevant for iOS < 5.0.

You can extract an URL from the ALAsset, but all the filenames are the same, on the form

assets-library://asset/asset.JPG?id=1000000001&ext=JPG

If you for some reason need different file names, try making an internal-external paradigm:

#import   @interface NSURL (NSURL_Asset)  - (NSURL*) toExternalForm; - (NSURL*) fromExternalForm; - (NSString*) toExternalFilename;      @end  #import "NSURL+Asset.h" #import "URLParser.h" // from 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]        
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!