将视频上传到 Firebase 存储(未知错误)

Posted

技术标签:

【中文标题】将视频上传到 Firebase 存储(未知错误)【英文标题】:Upload video to Firebase Storage (Unknown error) 【发布时间】:2020-10-26 19:55:32 【问题描述】:

我想做的事:从我的图像选择器中获取一个视频并将其上传到 Firebase 存储,然后在我的 Firestore 中创建一个指向它的文档。

当前的问题是什么: Xcode 向我抛出一个未知错误。无法将视频上传到存储。 (下面的控制台响应)

我的代码:

if self.fireImage == nil, description == "", self.fireURL != nil
                                
    print(self.fireURL!)
    storageVideoRef.putFile(from: self.fireURL! as URL, metadata: nil)  (storageMetaData, error) in
    if error != nil
        print(error!.localizedDescription)
        return
        
        print("is in database")
            storageVideoRef.downloadURL  (url, error) in
            if let metaVideoUrl = url?.absoluteString
                                            
            docRef.getDocument  (doc, err) in
                if let doc = doc, doc.exists
                print("Post ID already taken")
                else
                                                    
                print("Post gets created")
                                                
                self.db.collection("posts").document(combined).setData([
                    "hasLiked": [],
                    "likes": self.likes,
                    "video": metaVideoUrl,
                    "postType": 6,
                    "profileImage": pfp!,
                    "time": date,
                    "uid": self.userID,
                    "username": fullname!,
                    "postID": combined,
                                                
                    ])  err in
                    if let err = err 
                        print("Error writing document: \(err)")
                     else 
                        print("Post Document successfully written!")
                            
                        
                    
                
            
        
    

控制台告诉我的:

file:///Users/janjan/Library/Developer/CoreSimulator/Devices/63A8A6CC-ED10-49C2-8C24-EC6EF9919061/data/Containers/Data/PluginKitPlugin/601B4FBB-1343-4AF0-BFF4-C44CFBF3E633/tmp/trim.B03B576D-1887-4C6F-A0AE-93689A8A5EDB.MOV
2020-07-06 17:51:42.891754+0200 LiFit[20902:2197419] Task <18AD8076-F410-4E50-997E-FF77DFF5F760>.<1> finished with error [-1] Error Domain=NSURLErrorDomain Code=-1 "unknown error" UserInfo=NSErrorFailingURLStringKey=https://firebasestorage.googleapis.com/v0/b/lifit-98bf5.appspot.com/o/postVideos%2FI47GVyorQQVVsn6O29qRUavz1it2203458125?uploadType=resumable&name=postVideos%2FI47GVyorQQVVsn6O29qRUavz1it2203458125&upload_id=AAANsUmSPY8KB9XMpYvZxJqWiHPrwz4FT9uPxfKy8yyf-eIvrcRVEP0lkWDXWiSWy9i1q7hkOxdGqinJvkALDrskCIk&upload_protocol=resumable, NSErrorFailingURLKey=https://firebasestorage.googleapis.com/v0/b/lifit-98bf5.appspot.com/o/postVideos%2FI47GVyorQQVVsn6O29qRUavz1it2203458125?uploadType=resumable&name=postVideos%2FI47GVyorQQVVsn6O29qRUavz1it2203458125&upload_id=AAANsUmSPY8KB9XMpYvZxJqWiHPrwz4FT9uPxfKy8yyf-eIvrcRVEP0lkWDXWiSWy9i1q7hkOxdGqinJvkALDrskCIk&upload_protocol=resumable, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "BackgroundUploadTask <18AD8076-F410-4E50-997E-FF77DFF5F760>.<1>"
), _NSURLErrorFailingURLSessionTaskErrorKey=BackgroundUploadTask <18AD8076-F410-4E50-997E-FF77DFF5F760>.<1>, NSLocalizedDescription=unknown error
An unknown error occurred, please check the server response.
``

【问题讨论】:

这似乎是由于来自服务器的否定响应。你对firebase有什么特别的规则吗?即使它是旧的答案,请尝试关注this solution。 @Gius 谢谢你的建议。我尝试了该方法,但仍然收到相同的错误消息。我想我必须查看一下我的 firebase 设置(尽管我可以上传照片)。 【参考方案1】:

看起来这是 ios 13 的问题,其中文件路径与所有其他版本略有不同。

我通过检查上传设备是否在 iOS 13 上解决了这个问题,然后更改了文件路径以使其正常工作。

代码如下:

else if let videoURL = info[.mediaURL] as? URL 
            fireURL = videoURL
            
            do 
                if #available(iOS 13, *) 
                    //If on iOS13 slice the URL to get the name of the file
                    let urlString = videoURL.relativeString
                    let urlSlices = urlString.split(separator: ".")
                    //Create a temp directory using the file name
                    let tempDirectoryURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
                    fireURL = tempDirectoryURL.appendingPathComponent(String(urlSlices[1])).appendingPathExtension(String(urlSlices[2]))

                    //Copy the video over
                    try FileManager.default.copyItem(at: videoURL, to: fireURL!)
                
            
            catch let error 
                print(error.localizedDescription)
            

【讨论】:

以上是关于将视频上传到 Firebase 存储(未知错误)的主要内容,如果未能解决你的问题,请参考以下文章

将文件上传到 Firebase 存储错误 404 -“未找到。无法获取对象”

无法将 facebook 个人资料图片 (Uri) 上传到 Firebase 存储

Firebase 存储:发生未知错误,请检查错误负载以获取服务器响应

使用 React Native 将图像上传到 Firebase

Firebase 云功能 [错误:超出内存限制。函数调用被中断。] 在 youtube 视频上传

Android - 将视频/音频文件上传到 Firebase 存储