0

Ich verwende JSQMessagesViewController, um Fotonachrichten in meinen Chats zu senden, und ich stehe vor diesem Problem, wenn ich versuche, ein Bild hochzuladen aus der Galerie. Hier ist mein Code:Die Datei "IMG_0001.JPG" konnte nicht geöffnet werden, da Sie nicht berechtigt sind, sie anzuzeigen

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

`ve viel darüber in google lesen (The file “xxx.mp4” couldn’t be opened because you don’t have permission to view it), aber leider gibt es keine Lösung dafür. Bitte hilf mir zu verstehen, wie ich diese Warnung beheben könnte? Ganze Warnmeldung:

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.

P. S. Das funktioniert gut im Emulator, ich bekomme diese Warnung nur am echten Gerät.

+0

add Foto Bibliotheksnutzung Beschreibung in Ihrer Datei info.plist .und im Wert Abschnitt hinzufügen jede Nachricht, die Sie –

+0

@Samarth Kejriwal bereits getan wollen, immer noch diese Warnung – Burning

+0

verwenden 'wenn lassen Sie PhotoReferenceUrl = info [UIImagePickerControllerImageURL] als? URL', weil 'UIImagePickerControllerReferenceURL' veraltet ist ' –

Antwort

0

ich Rewrite imagePickerController Methode habe, jetzt funktioniert es perfekt

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 
     } 
    } 
Verwandte Themen