Trong bài này tôi sẽ hướng dẫn cách bạn cách để lưu ảnh lên Database của bạn ở FireBase bằng cách chuyển nó về Base64Strings.
Như các bạn đã biết các kiểu dữ liệu Firebase hỗ trợ để lưu không có kiểu ảnh, nhưng chúng ta vẫn có thể làm việc đó bằng cách chuyển ảnh sang kiểu Base64 strings…
Lưu ảnh lên FireBase
- Ảnh tôi lưu ở local hoặc các bạn có thể lấy online cũng được
- Đầu tiên chúng ta sẽ phải khai báo đường dẫn đến Database như ở các bài trước:
let ref = Firebase(url:"https://testfirebase-tu.firebaseio.com")
- Tiếp theo tôi sẽ lấy ảnh
var uploadImage = UIImage(named: "1460642784_Snowman.png")
- Ở dưới đây tôi chuyển ảnh sang kiểu dữ liệu NSData rồi sau đó encode về định dạng base64Strings:
var imageData: NSData = UIImagePNGRepresentation(uploadImage!)!
let base64String = imageData.base64EncodedStringWithOptions([]) ref.childByAppendingPath("images").setValue(["string": base64String])
- Các bạn có thể thấy dữ liệu của chúng ta đã được lưu trên FireBase là kiểu string:
Nhận ảnh từ FireBase
Để nhận được ảnh từ Firebase bạn phải khai báo một observe, ở dưới đây tôi sẽ sử dụng sự kiện ChildAdded để lấy ra các dữ liệu của nhánh con:
ref.observeEventType(.ChildAdded, withBlock: { snapshot in
//Ở đây với Database có thể có nhiều nhánh con nên tôi kiểm tra xem nhánh con đó có key nào là string( đây là key chứa dữ liệu ảnh)
if let value = snapshot.value["string"] as? String
{
//sau khi chắc chắn có dữ liệu tôi lại kiểm trả nếu mà decode thành công thì tôi sẽ lấy được ảnh
if let base64Decoded = NSData(base64EncodedString: value, options: NSDataBase64DecodingOptions(rawValue: 0))
{
//sau khi lấy được ảnh tôi sẽ hiển thị ảnh lên view
let imgView = UIImageView(frame: CGRectMake(100, 100, 40, 40))
imgView.image = UIImage(data: base64Decoded)
self.view.addSubview(imgView)
}
}
}, withCancelBlock: { error in
print(error.description)
})
Ảnh được hiển thị lên View:
Chú ý: Firebase giới hạn bạn chỉ có thể lưu ảnh dưới 10MB.
Bình luận