将图像上传到 Firebase 时,Swift 应用程序崩溃
Posted
技术标签:
【中文标题】将图像上传到 Firebase 时,Swift 应用程序崩溃【英文标题】:Swift app crashes when uploading image to firebase 【发布时间】:2017-08-12 13:39:22 【问题描述】:我正在尝试获取我选择的视频的缩略图。
它似乎确实创建了缩略图,但在将其上传到 firebase 时崩溃
我相信它会在thumbnailStorageRef
崩溃。
以下是相关代码:
guard let imagePickerUrl = info[UIImagePickerControllerMediaURL] as? URL else return
let videoUrl = imagePickerUrl
// Generate image thumbnail.
let asset: AVAsset = AVAsset(url: videoUrl as URL)
let imageGenerator = AVAssetImageGenerator(asset: asset)
imageGenerator.appliesPreferredTrackTransform = true
var time = asset.duration
time.value = min(time.value, 3)
do
let thumbnailImage = try imageGenerator.copyCGImage(at: time , actualTime: nil)
let image = UIImage(cgImage: thumbnailImage)
let imageData = UIImagePNGRepresentation(image)!
let thumbnailStorageRef = FIRStorage.storage().reference()
thumbnailStorageRef.child("thumbnails/" + randomString(length: 20) + ".png")
thumbnailStorageRef.put(imageData, metadata: nil, completion: (thumbnailMeta, error) in
if error != nil
print("An error has occured while uploading thumbnail:",error ?? "")
else
print("Thumbnail upload to database was successfull", thumbnailMeta?.downloadURL() ?? "")
)
catch
print("An error has occurred while making thumbnail:")
当崩溃错误控制台说:
2017-08-11 17:19:08.656 Koala[17914:491998] * 终止应用程序由于 未捕获的异常 'NSInvalidArgumentException',原因:'* -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: 尝试从 objects[1] 插入 nil 对象' *** 首先抛出调用栈:
我不知道这个错误信息想说什么,也许尝试上传的图像是 nil?我不确定。
【问题讨论】:
大胆猜测:你的 imageData 是 nil。 我刚刚用 if let 安全地打开包装,它说 imageData 不是 nil @Glenn 图像数据打印“233912 字节” Erik,尝试进一步的调试方法。比如添加断点和异常断点。 【参考方案1】:您好像忘记使用刚刚创建的 child 存储节点。因此,请尝试替换此代码:
thumbnailStorageRef.child("thumbnails/" + randomString(length: 20) + ".png")
thumbnailStorageRef.put(imageData, metadata: nil, completion: ...
用这个代替:
let imageRef = thumbnailStorageRef.child("thumbnails/" + randomString(length: 20) + ".png")
imageRef.put(imageData, metadata: nil, completion: ...
此更改应该可以解决您当前的问题;)
【讨论】:
@ErikBatista 很好,很高兴知道 ;) 顺便说一句,如果有机会,请务必将其标记为已接受的答案,谢谢!以上是关于将图像上传到 Firebase 时,Swift 应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 5 /SwiftUI 将 AVAudioRecorder 文件上传到 Firebase 存储?