首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在firebase存储中存储图像并在数据库中保存指向它们的链接?

如何在firebase存储中存储图像并在数据库中保存指向它们的链接?
EN

Stack Overflow用户
提问于 2018-08-23 03:40:44
回答 2查看 3.2K关注 0票数 0

我四处寻找这个问题的答案。我得到的最接近的是here,然而,它并没有准确地回答我的问题。也就是说,如何在数据库中存储对保存在firebase存储中的图像的引用。

下面是我尝试过的代码。它可以在上传时存储一张图片,但我不确定这是否是他们存储引用的意思。

代码语言:javascript
复制
if let imageData = UIImageJPEGRepresentation(image, 0.8) {
    let metadata = storageRef //.child("poop/")

    let uploadTask = metadata.putData(imageData, metadata: nil) {
         (metadata, error) in
        guard let metadata = metadata else {
            // Uh-oh, an error occurred!
            return
        }

        // You can also access to download URL after upload.
        storageRef.downloadURL { 
            (url, error) in
            guard let downloadURL = url else {
                // Uh-oh, an error occurred!
                return
            }
            //let imgURL = url

            //database integration
            let ref = Database.database().reference()
            let usersRef = ref.child("usersPosts")

            let uid = Auth.auth().currentUser?.uid
            let newUserRef = usersRef.child(uid!)
            //creates a child for email and password (i think we shud store password so we can tell sumone what it is inmediatly, maybe)
            newUserRef.setValue(["Image": "\(downloadURL)"])
        }

    }

    //            let imgURL = storageRef.downloadURL
    //
    //            //database integration
    //            let ref = Database.database().reference()
    //            let usersRef = ref.child("usersPosts")
    //
    //            let uid = Auth.auth().currentUser?.uid
    //            let newUserRef = usersRef.child(uid!)
    //            //creates a child for email and password (i think we shud store password so we can tell sumone what it is inmediatly, maybe)
    ////                newUserRef.setValue(["Image": "\(imgURL)"])





    // For progress
    uploadTask.observe(.progress, handler: { (snapshot) in
        guard let progress = snapshot.progress else {
        return
    }

    let percentage = (Float(progress.completedUnitCount) / Float(progress.totalUnitCount))
    progressBlock(Double(percentage))
    })

} else {
    completionBlock(nil, "Image could not be converted to Data.")
}

非常感谢你的帮助!

EN

回答 2

Stack Overflow用户

发布于 2018-08-23 13:04:37

请根据需要修改您的代码

代码语言:javascript
复制
var imgData: NSData = NSData(data: UIImageJPEGRepresentation((self.img_Photo?.image)!, 0.8)!)
self.uploadProfileImageToFirebase(data: imgData)


func uploadProfileImageToFirebase(data:NSData){
    let storageRef = Storage.storage().reference().child("usersPosts").child("\(uid).jpg")
    if data != nil {
        storageRef.putData(data as Data, metadata: nil, completion: { (metadata, error) in
            if(error != nil){
                print(error)
                return
            }
            guard let userID = Auth.auth().currentUser?.uid else {
                return
            }
            // Fetch the download URL
            storageRef.downloadURL { url, error in
                if let error = error {
                    // Handle any errors
                    if(error != nil){
                        print(error)
                        return
                    }
                } else {
                    // Get the download URL for 'images/stars.jpg'

                    let urlStr:String = (url?.absoluteString) ?? ""
                    let values = ["downloadURL": urlStr]
                    self.addImageURLToDatabase(uid: userID, values: values as [String : AnyObject])
                }
            }
        })
    }

}


func addImageURLToDatabase(uid:String, values:[String:AnyObject]){
    let ref = Database.database().reference(fromURL: "https://exampleapp.firebaseio.com/")
    let usersReference = ref.child("usersPosts").child((Auth.auth().currentUser?.uid)!)

    usersReference.updateChildValues(values) { (error, ref) in
        if(error != nil){
            print(error)
            return
        }
        self.parentVC?.dismiss(animated: true, completion: nil)
    }

}
票数 2
EN

Stack Overflow用户

发布于 2019-08-07 16:53:00

代码语言:javascript
复制
(TS)  
onFileChanged(param){    
var aa;    
const file: File = param.target.files[0];  
const metaData = { 'contentType': file.type };    
const StorageRef: firebase.storage.Reference = firebase.storage().ref('/photos/Category/'+this.CategoryName);    
const Store = StorageRef.put(file, metaData);
setTimeout(() => {
const UP: firebase.storage.UploadTask = Store;
 UP.snapshot.ref.getDownloadURL().then(function (downloadURL) {
console.log('File available at', downloadURL);
aa = downloadURL;
});
}, 1000);

setTimeout(() => {
this.ImageLink = aa;
debugger;
}, 2000);

IN HTML
代码语言:javascript
复制
type="file" accept="image/*" #file style="display: none">
<img (click)="file.click()" style="margin-left: 10%"src="http://icons.iconarchive.com/icons/icons8/windows-8/512/Photo-Video-Stack-Of-Photos-icon.png" width="50px" />

将*作为firebase导入为'@ionic/firebase‘

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51974047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档