使用Google Firebase同时上传多张图片

我在Swift iOS项目中使用Google Firebase。 我有我的应用程序的一部分,用户从他们的设备select超过1张照片上传。 我试图find将所有一次select的照片上传到Firebase存储的最佳做法。 我知道如何上传一张照片。

我查看了文档,没有看到上传多个NSData对象的方法,所以我只是运行一个for循环并单独上传每个图像?

谢谢! 所有的反馈意见。

Swift 3这是我将多个图像上传到Firebase的方式。 我正在计数成功的上传,如果它等于提供的图像的数量,那当我打电话给完成处理程序。

不知道这是否是最佳做法,但它的工作原理!

import Foundation import Firebase import FirebaseDatabase import FirebaseStorage class UploadImages: NSObject{ static func saveImages(imagesArray : [UiImage]){ Auth.auth().signInAnonymously() { (user, error) in //let isAnonymous = user!.isAnonymous // true //let uid = user!.uid if error != nil{ print(error) return } guard let uid = user?.uid else{ return } uploadImages(userId: uid,imagesArray : imagesArray){ (uploadedImageUrlsArray) in print("uploadedImageUrlsArray: \(uploadedImageUrlsArray)") } } } static func uploadImages(userId: String, imagesArray : [UIImage], completionHandler: @escaping ([String]) -> ()){ var storage = Storage.storage() var uploadedImageUrlsArray = [String]() var uploadCount = 0 let imagesCount = imagesArray.count for image in imagesArray{ let imageName = NSUUID().uuidString // Unique string to reference image //Create storage reference for image let storageRef = storage.reference().child("\(userId)").child("\(imageName).png") guard let myImage = image else{ return } guard let uplodaData = UIImagePNGRepresentation(myImage) else{ return } // Upload image to firebase let uploadTask = storageRef.putData(uplodaData, metadata: nil, completion: { (metadata, error) in if error != nil{ print(error) return } if let imageUrl = metadata?.downloadURL()?.absoluteString{ print(imageUrl) uploadedImageUrlsArray.append(imageUrl) uploadCount += 1 print("Number of images successfully uploaded: \(uploadCount)") if uploadCount == imagesCount{ NSLog("All Images are uploaded successfully, uploadedImageUrlsArray: \(uploadedImageUrlsArray)") completionHandler(uploadedImageUrlsArray) } } }) observeUploadTaskFailureCases(uploadTask : uploadTask) } } //Func to observe error cases while uploading image files, Ref: https://firebase.google.com/docs/storage/ios/upload-files static func observeUploadTaskFailureCases(uploadTask : StorageUploadTask){ uploadTask.observe(.failure) { snapshot in if let error = snapshot.error as? NSError { switch (StorageErrorCode(rawValue: error.code)!) { case .objectNotFound: NSLog("File doesn't exist") break case .unauthorized: NSLog("User doesn't have permission to access file") break case .cancelled: NSLog("User canceled the upload") break case .unknown: NSLog("Unknown error occurred, inspect the server response") break default: NSLog("A separate error occurred, This is a good place to retry the upload.") break } } } } } 

用法

 let arrayOfImages : [UIImage] = [Image1, Image2, Image3] UploadImages.saveImages(imagesArray: arrayOfImages) 

回复@FrankVanPuffellen在评论中…

“你确实只是循环上传,你的iOS用户也可能会喜欢,如果你一次上传一个,这样他们可以中途中止上传,而不会丢失所有图像的进度。 – Frank van Puffelen