0

我正在尝试使用 phpickerviewcontroller 上传视频文件,但在将 URL 上传到 FirebaseStorage 时遇到问题。这是一些代码:

func uploadVideo(videoURL: URL)
    {
        let storage = Storage.storage()
        let storageRef = storage.reference()
        
        let videoRef = storageRef.child("rPosts/\(uid!)/\(fileID)")
        let metadata = StorageMetadata()
        metadata.contentType = "video/quicktime"
        
        var videoData: Data = Data()
        
        do
        {
            videoData = try Data(contentsOf: videoURL)
        }
        catch
        {
            print(error.localizedDescription)
            return
        }
        
        videoRef.putData(videoData, metadata: metadata)
        { (metaData, error) in
            guard error == nil else
            {
                self.errorLabel.text = error!.localizedDescription
                return
            }
        }
    }
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult])
    {
        dismiss(animated: true, completion: nil)
        guard let itemProvider = results.first?.itemProvider else { return }
        
        itemProvider.loadItem(forTypeIdentifier: "com.apple.quicktime-movie", options: nil)
        { (videoFile, error) in
            guard error == nil else { return }
            
            let videoFile = videoFile as? URL
            DispatchQueue.main.async
            {
                self.uploadVideo(videoURL: videoFile!)
                
                print(videoFile!)
            }
        
            self.uploadedYet = true
        }
    }

我试过使用.putFile,但它一直在说

确保文件 URL 不是目录、符号链接或无效 url。

当我使用.putData它说

文件“...”无法打开,因为没有这样的文件

编辑:

itemProvider.loadFileRepresentation(forTypeIdentifier: "com.apple.quicktime-movie")
        { (videoURL, error) in
            guard error == nil else { return }
            print("isbeingcalled") //does not get calleed :(
            
            DispatchQueue.main.async
            {
                let storageRef = Storage.storage().reference()
                
                let videoRef = storageRef.child("rPosts/\(self.uid!)/\(self.fileID).mov")
                let metadata = StorageMetadata()
                metadata.contentType = "video/quicktime"
                
                print("run")
                
                videoRef.putFile(from: videoURL!, metadata: metadata)
                { (metaData, error) in
                    guard error == nil else
                    {
                        print(videoURL!)
                        print(videoRef.fullPath)
                        self.errorLabel.text = error!.localizedDescription
                        print(error!.localizedDescription)
                        return
                    }
                }
            }
        
            self.uploadedYet = true
        }
4

0 回答 0