3

How to get filename when using PHPickerViewController for photo

this is my function code

func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
        
        dismiss(animated: true, completion: nil)
        
        for item in results {
            item.itemProvider.loadObject(ofClass: UIImage.self) {(image, error) in
                if let image = image as? UIImage{

   
                }
                
            }
        }
    }

Please help, thank you

Faysal Ahmed
  • 7,501
  • 5
  • 28
  • 50

2 Answers2

6

Hope you van find file name by using this:

item.itemProvider.loadFileRepresentation(forTypeIdentifier: "public.item") { (url, error) in
                if error != nil {
                   print("error \(error!)");
                } else {
                    if let url = url {
                        let filename = url.lastPathComponent;
                        print(filename)
                    }
                }
            }

You can use this to get file name from UIImagePickerController

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let imageURL = info[UIImagePickerControllerReferenceURL] as? URL {
        let result = PHAsset.fetchAssets(withALAssetURLs: [imageURL], options: nil)
        let asset = result.firstObject
        print(asset?.value(forKey: "filename"))

    }

    dismiss(animated: true, completion: nil)
}
pableiros
  • 14,932
  • 12
  • 99
  • 105
Faysal Ahmed
  • 7,501
  • 5
  • 28
  • 50
2

The NSItemProvider from PHPickerResult has a suggestedName property that will give you the file name. So from your provided code:

func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
        
    dismiss(animated: true, completion: nil)
        
    for item in results {
        item.itemProvider.loadObject(ofClass: UIImage.self) {(image, error) in
            // This will give you the file name
            guard let fileName = item.itemProvider.suggestedName else { return }
            if let image = image as? UIImage{
   
            }
        }
    }
}
re_zacks
  • 105
  • 1
  • 8