昨天因为对话的部分有bug...解不粗乃
呜呜呜想说那来先看看别的部分好了(?)
一样,我们从firebase原先开好的专案进入storage,确认可以被连线後,在本地podfile把library load进来。
pod 'Firebase/Storage'
接着在终端机执行下载
pod install
基本上,上传档案/照片不外乎就是在上传的时候将档案转换成byte形式上传,然後储存在firebase storage空间中,当然,以各档案类型、原本的形式。
如果使用第三方的登入,那麽做法就会被拆解成:先下载第三方的头像 -> 上传该图片 -> 显示。
不过这次注册登入没有接第三方的api,所以就先这样~XD
我们希望档案储存的结构如下,其中加上路径(子资料夹)images
使得标的更清晰。
/images/a8udej-gmail-com_profile_picture.jpg
接着在resource的部分开新档案,我们使用一般的swift档案即可,就命名为StorageManager
,顾名思义负责与储存空间相关的逻辑处理。
import FirebaseStorage
跟Database一样,我们使用static只让连线使用同一个
final class StorageManager {
static let shared = StorageManager()
private let storage = Storage.storage().reference()
然後我们开始开发uploadProfilePicture
,其中completion我们希望可以用一个result去把回传的url包起来,因此可以另外写一个typealias
// result is String either Error
public typealias UploadPictureCompletion = (Result<String, Error>) -> Void
在这个方法中有两个error预期被handle,一个是当无法将图片正常上传、第二个是url没办法正确的回传。如果这两个没发生,预期是正常的结果,completion完成!
/// Upload picture to firebase storage and return completion with url string to download
public func uploadProfilePicture(with data: Data, fileName: String, completion: @escaping UploadPictureCompletion) {
storage.child("imagess/\(fileName)").putData(data, metadata: nil, completion: {
metadata, error in
guard error == nil else {
print("failed to upload data to firebase for pictures")
completion(.failure(StorageErrors.failedToUpload))
return
}
let reference = self.storage.child("imagess/\(fileName)").downloadURL(completion: { url, error in
guard let url = url else {
print("")
completion(.failure(StorageErrors.failedToGetDownloadUrl))
return
}
let urlString = url.absoluteString
print("download url returned: \(urlString)")
completion(.success(urlString))
})
})
}
其中,我们也把error讯息分别以enum的方式specify出来。
public enum StorageErrors : Error {
case failedToUpload
case failedToGetDownloadUrl
}
}
那今天就先到这边~
若上述内容有误或可以改进的部分,欢迎留言以及提出任何指教~
谢谢 ヘ| ´ω` |ノ
<<: 用React刻自己的投资Dashboard Day27 - 台股技术面刻板
>>: Day 27: 暴力破解 WPA/WPA2 加密 wifi 密码
上一篇提到可以从 Search Console 看到 6 种不同的流量来源,而 SC 提供的概要是用...
今天在执行 WordPress 上的版本更新时,因为更新档案太大,出现了错误「FastCGI 处理序...
Ktor Authentication Plugin 因为 Ktor 的开发风格是 DSL,不依赖 ...
想记录一下搬家到Cloudways的心路历程以及经验分享... 老实说,我非常庆幸自己没有经历过Su...
还记得区域元件有自己的作用域吗?已知外层元件可以跟内层元件传递资料(props),或是传递事件(em...