Swift 将图片上传到 Firebase 时应用崩溃
Swift app crashes when uploading image to firebase
我正在尝试获取所选视频的缩略图。
它似乎确实创建了缩略图,但在将其上传到 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] * Terminating app due to
uncaught exception 'NSInvalidArgumentException', reason: '*
-[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[1]'
*** First throw call stack:
我不知道这个错误消息想表达什么,也许是试图上传的图片是 nil?我不确定。
您似乎忘记使用刚刚创建的 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: ...
此更改应该可以解决您当前的问题;)
我正在尝试获取所选视频的缩略图。
它似乎确实创建了缩略图,但在将其上传到 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] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[1]' *** First throw call stack:
我不知道这个错误消息想表达什么,也许是试图上传的图片是 nil?我不确定。
您似乎忘记使用刚刚创建的 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: ...
此更改应该可以解决您当前的问题;)