PHAsset get original file name

后端 未结 4 1017

I wonder if there any way to get the original file name using PHAsset?

I use the following code to extract the file info.

   [[PHImageManager defaultMa         


        
相关标签:
4条回答
  • 2021-01-31 20:15

    Maybe you can use the method, it works above iOS8:

     [asset requestContentEditingInputWithOptions:options completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
    
        CIImage *fullImage = [CIImage imageWithContentsOfURL:contentEditingInput.fullSizeImageURL];
        NSLog(@"%@",contentEditingInput.fullSizeImageURL);//get url
        NSLog(@"%@", fullImage.properties.description);//get {TIFF}, {Exif}
    }];
    
    0 讨论(0)
  • 2021-01-31 20:22

    On iOS 8 your solution is the right (and only approach) to get a filename at all.

    On iOS 9 this works:

    NSArray *resources = [PHAssetResource assetResourcesForAsset:asset];
    NSString *orgFilename = ((PHAssetResource*)resources[0]).originalFilename;
    
    0 讨论(0)
  • 2021-01-31 20:29

    I had to modify my code because it started returning nonsense names. My solution was to pick the resource based on asset's mediaType and resource's type, but maybe there is something easier:

    extension PHAsset {
        var primaryResource: PHAssetResource? {
            let types: Set<PHAssetResourceType>
    
            switch mediaType {
            case .video:
                types = [.video, .fullSizeVideo]
            case .image:
                types = [.photo, .fullSizePhoto]
            case .audio:
                types = [.audio]
            case .unknown:
                types = []
            @unknown default:
                types = []
            }
    
            let resources = PHAssetResource.assetResources(for: self)
            let resource = resources.first { types.contains($0.type)}
    
            return resource ?? resources.first
        }
    
        var originalFilename: String {
            guard let result = primaryResource else {
                return "file"
            }
    
            return result.originalFilename
        }
    }
    
    0 讨论(0)
  • 2021-01-31 20:33

    Short way to get file name with one line of code. Asset have a property for accessing file name.

     NSString*FileName=[asset valueForKey:@"filename"];
     NSLog(@"File name %@",FileName);
    
    Its done.
    
    Note: Accepted answer takes lots of time to load a phasset but it works.
    
    0 讨论(0)
提交回复
热议问题