将图像上传到 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 应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

将多个图像上传到 Firebase

尝试将图像上传到 Firebase 存储时出错

如何使用 Swift 5 /SwiftUI 将 AVAudioRecorder 文件上传到 Firebase 存储?

将相机图像上传到 Firebase

ios将图像上传到Firebase但是当我尝试下载时却不是这样吗?

将图像上传到 Firebase 存储时如何制作进度条?