2017-08-12 75 views
2

我试图让我选择的视频的缩略图时。斯威夫特应用程序崩溃上传图像火力

好像它创建缩略图,但上传时,它火力

它崩溃的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年8月11日17:19:08.656考拉[17914:491998] *终止由于应用到 未捕获的异常 'NSInvalidArgumentException',原因是: '* - [__ NSPlaceholderDictionary initWithObjects:forKeys:数:]:尝试从物体插入零对象[1]' ***第一掷通话STAC k:

我不知道这个错误消息试图说什么,也许该图片试图上传是零?我不确定。

+1

野生猜想:你的imageData是零。 – Glenn

+0

我只是如果让安全解开它说为imageData不是零 –

+0

@Glenn的图像数据输出“233912个字节” –

回答

4

看起来你忘了使用您刚才创建的存储节点。尝试更换此代码:

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: ... 

这种变化应该可以解决您的本期)

+0

这引起了它的工作!非常感谢! –

+0

@ErikBatista尼斯,好知道;)顺便说一句,请务必将其标记为接受的答案,当你得到一个机会,谢谢! –