0

J'utilise JSQMessagesViewController pour envoyer des messages photo dans mes chats et je suis confronté à ce problème lorsque j'essaie de télécharger l'image de la galerie. Voici mon code:Le fichier "IMG_0001.JPG" n'a pas pu être ouvert car vous n'avez pas l'autorisation de le voir

override func didPressAccessoryButton(_ sender: UIButton) { 
     let picker = UIImagePickerController() 
     picker.delegate = self 
     if (UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary)) { 
      picker.sourceType = UIImagePickerControllerSourceType.photoLibrary 
     } 

     present(picker, animated: true, completion:nil) 
    } 

    func imagePickerController(_ picker: UIImagePickerController, 
           didFinishPickingMediaWithInfo info: [String : Any]) { 

     picker.dismiss(animated: true, completion:nil) 

     // 1 
     if let photoReferenceUrl = info[UIImagePickerControllerReferenceURL] as? URL { 
      // Handle picking a Photo from the Po8hoto Library 
      // 2 
      let assets = PHAsset.fetchAssets(withALAssetURLs: [photoReferenceUrl], options: nil) 
      let asset = assets.firstObject 

      // 3 
      if let key = sendPhotoMessage() { 
       // 4 
       asset?.requestContentEditingInput(with: nil, completionHandler: { (contentEditingInput, info) in 
        let imageFileURL = contentEditingInput?.fullSizeImageURL 

        // 5 
        let path = "\(FIRAuth.auth()?.currentUser?.uid)/\(Int(Date.timeIntervalSinceReferenceDate * 1000))/\(photoReferenceUrl.lastPathComponent)" 

        // 6 
        self.storageRef.child(path).putFile(imageFileURL!, metadata: nil) { (metadata, error) in 
         if let error = error { 
          print("Error uploading photo: \(error.localizedDescription)") 
          return 
         } 
         // 7 
         self.setImageURL(self.storageRef.child((metadata?.path)!).description, forPhotoMessageWithKey: key) 
        } 
       }) 
      } 
     } else { 
      // Handle picking a Photo from the Camera - TODO 
     } 
    } 

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 
     picker.dismiss(animated: true, completion:nil) 
    } 

passe beaucoup lu à ce sujet dans google (The file “xxx.mp4” couldn’t be opened because you don’t have permission to view it), mais malheureusement, il n'y a pas de solution pour elle. S'il vous plaît aidez-moi à comprendre comment pourrais-je réparer cet avertissement? message d'avertissement entier:

Body file is unreachable: /var/mobile/Media/PhotoData/Sync/100SYNCD/IMG_0001.JPG Error Domain=NSCocoaErrorDomain Code=257 "The file “IMG_0001.JPG” couldn’t be opened because you don’t have permission to view it." UserInfo={NSURL=file:///var/mobile/Media/PhotoData/Sync/100SYNCD/IMG_0001.JPG, NSFilePath=/var/mobile/Media/PhotoData/Sync/100SYNCD/IMG_0001.JPG, NSUnderlyingError=0x17464d4a0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}} Error uploading photo: An unknown error occurred, please check the server response.

post-scriptum cela fonctionne bien dans l'émulateur, je reçois cet avertissement uniquement sur le périphérique réel.

+0

ajouter une description de l'utilisation de la photothèque dans votre fichier Info.plist .and dans la section de valeur ajouter un message que vous voulez –

+0

@Samarth Kejriwal déjà fait, encore obtenir cet avertissement – Burning

+0

utiliser 'si laisser photoReferenceUrl = info [UIImagePickerControllerImageURL] comme? URL', parce que 'UIImagePickerControllerReferenceURL'est obsolète ' –

Répondre

0

J'ai méthode rewrite imagePickerController, maintenant il fonctionne parfaitement

func imagePickerController(_ picker: UIImagePickerController, 
           didFinishPickingMediaWithInfo info: [String : Any]) { 

     picker.dismiss(animated: true, completion:nil) 

     let stRef = FIRStorage.storage().reference() 

     let metaData = FIRStorageMetadata() 
     metaData.contentType = "image/jpeg" 

     if let photo = info[UIImagePickerControllerOriginalImage] as? UIImage { 
      var data = NSData() 
      data = UIImageJPEGRepresentation(photo, 0.25)! as NSData 
      if let key = sendPhotoMessage() { 
        let path = "\(FIRAuth.auth()?.currentUser?.uid)/\(Int(Date.timeIntervalSinceReferenceDate * 1000)))" 

       stRef.child(path).put(data as Data, metadata: metaData){ (metaData,error) in 
         if error != nil { 
          return 
         } 
         else { 
          let downloadURL = metaData!.downloadURL()!.absoluteString 
          self.setImageURL(downloadURL, forPhotoMessageWithKey: key) 
         } 
        } 
      } 
     } else { 
      // Handle picking a Photo from the Camera - TODO 
     } 
    }