如何使用Asset Library在uiimagepickercontroller中获取文件名?

我想从UIImagepickercontroller获取文件名。我不想使用ALAssetLibrary,因为它在iOS 9中被弃用。请告诉如何使用它。我已经使用了下面的代码,但它总是为每个文件返回imagename作为Asset.jpg

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let originalImage = (info[UIImagePickerControllerOriginalImage] as? UIImage)! let url = info[UIImagePickerControllerReferenceURL] as! NSURL imageData = UIImageJPEGRepresentation(originalImage, 100) as NSData? let data = UploadData() data.fileName = url.lastPathComponent picker.dismiss(animated: true, completion: nil) } 

我会build议你使用Photos Framework来获取图像的名称,下面是获取选定图像的名称的代码

 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) } 

这适用于我而不必依靠filename键(请原谅强制解开optionals :))

 extension ConversationDetailViewController : UIImagePickerControllerDelegate, UINavigationControllerDelegate { func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { guard let image = info[UIImagePickerControllerEditedImage] as? UIImage else { DDLogDebug("No image chosen") return } let url = info[UIImagePickerControllerReferenceURL] as! URL let assets = PHAsset.fetchAssets(withALAssetURLs: [url], options: nil) let fileName = PHAssetResource.assetResources(for: assets.firstObject!).first!.originalFilename DDLogDebug("File name = \(fileName)") dismiss(animated: true) } } 

做如下。

我相信它会帮助你。

这里我们将选中的图像保存到文档目录中,然后尝试从文档目录中访问这些图像。

 func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { let imageURL = info[UIImagePickerControllerReferenceURL] as NSURL let imageName = imageURL.path!.lastPathComponent let documentDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as String let localPath = documentDirectory.stringByAppendingPathComponent(imageName) let image = info[UIImagePickerControllerOriginalImage] as UIImage let data = UIImagePNGRepresentation(image) data.writeToFile(localPath, atomically: true) let imageData = NSData(contentsOfFile: localPath)! let photoURL = NSURL(fileURLWithPath: localPath) let imageWithData = UIImage(data: imageData)! picker.dismissViewControllerAnimated(true, completion: nil) } 

导入照片

 func getFileName(info: [String : Any]) -> String { if let imageURL = info[UIImagePickerControllerReferenceURL] as? URL { let result = PHAsset.fetchAssets(withALAssetURLs: [imageURL], options: nil) let asset = result.firstObject let fileName = asset?.value(forKey: "filename") let fileUrl = URL(string: fileName as! String) if let name = fileUrl?.deletingPathExtension().lastPathComponent { print(name) return name } } return "" } 

在方法“didFinishPickingMediaWithInfo”中调用它如下所示:

 let fileName = getFileName(info: info) 

你可以试试iOS 11

  func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let asset = info[UIImagePickerControllerPHAsset] as? PHAsset { if let fileName = (asset.value(forKey: "filename")) as? String { //Do your stuff here } } picker.dismiss(animated: true, completion: nil) } 

确保您将此NSPhotoLibraryUsageDescription添加到您的Infor.plist