ios - 将视频上传到 Firebase 存储(未知错误)
问题描述
我想要做的:从我的图像选择器中获取一个视频并将其上传到 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.
``
解决方案
看起来这是一个 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)
}
推荐阅读
- google-cloud-platform - GCP(AI Platform Notebook)上的“服务器连接错误”
- python - 从单独的列表创建一个嵌套列表
- java - 在您正在修改的静态字段上进行同步是否会使您的代码线程安全?
- c# - 双向使用 C# Socket
- python - 如何使用Python中的循环使用查找功能过滤excel中的所有行?
- c++ - C++ 从牌组中拉出一张牌
- javascript - Jquery选择以前的单选按钮值而不是当前?
- apache-spark - Spark join:对同一分区中的特定列具有相同值的记录分组
- python - 是否可以使用单独的终端打包 python 应用程序?
- jquery - 附加到最接近的 - 对于每个:重复的模式