IOS、Python自学心得30天 Day-28 上传图片到Firebase Storage

根据官方文件给的方法上传
https://firebase.google.com/docs/storage/ios/upload-files

程序码:

//
//  ViewController.swift
//  Dog Breed Recognition App
//
//  Created by PecaJo on 2021/6/24.

import UIKit
import FirebaseStorage

class ViewController: UIViewController {
    
    @IBOutlet weak var uploadButton: UIButton!
    @IBOutlet weak var libraryButton: UIButton!
    @IBOutlet weak var imageview: UIImageView!
    
    let imagePicker = UIImagePickerController()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.imagePicker.delegate = self
        // Do any additional setup after loading the view.
    }
    
    @IBAction func clickuploadbutton(_ sender: Any) {
        if imageview.image != nil {
            uploadFile()
        }
        else{
            let alertController = UIAlertController(title: "图片讯息", message: "请放入图片", preferredStyle: UIAlertController.Style.alert)
            alertController.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
            present(alertController, animated: true, completion: nil)
        }
    }
    @IBAction func clicklibrarybutton(_ sender: Any) {
        imagePicker.sourceType = .photoLibrary
        imagePicker.allowsEditing = true
        self.present(imagePicker, animated: true)
    }
    
    func uploadFile(){
        let url = URL(string: "https://XXXXXXXXXXXXXXXXXXXXXXXXXXX")
        // Create a root reference
        let storageRef = Storage.storage().reference()

        // Data in memory
        let imageData: Data = imageview.image!.jpegData(compressionQuality: 1.0)!

        // Create a reference to the file you want to upload
        let riversRef = storageRef.child("dog.jpg")

        // Upload the file to the path "images/rivers.jpg"
        let uploadTask = riversRef.putData(imageData, metadata: nil) { (metadata, error) in
          guard let metadata = metadata else {
            // Uh-oh, an error occurred!
            return
          }
          // Metadata contains file metadata such as size, content-type.
          let size = metadata.size
          // You can also access to download URL after upload.
          riversRef.downloadURL { (url, error) in
            guard let downloadURL = url else {
              // Uh-oh, an error occurred!
              return
            }
          }
        }
    }
}

extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let pickedImage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
            imageview.contentMode = .scaleAspectFit
            imageview.image = pickedImage
            imageview.layer.masksToBounds = true;
        }
        dismiss(animated: true, completion: nil)
    }
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        dismiss(animated: true, completion: nil)
    }
}


<<:  # Day 22 Heterogeneous Memory Management (HMM) (二)

>>:  Day30 I’m on the next level

Day4 - 几何抽象

目前近几年的不管是唱片 演唱会 线上设计风格开始走向几何风格形象 金曲30很美的背景设计 gerne...

2.4.14 Design System - Modal/Dialog/Popup/Overlay

习以为常 在外读书或工作几年後才发现 以前习以为常的那些小事 都是幸福 比如说回到家就有饭吃 以前...

[Day15]Week2总结

hi~今天要做week2总结,不知不觉半个月过去了!谢谢大家这半个月的观看,如果喜欢的话欢迎继续往...

D-18. SQL & NoSQL、SQL injection、primary key & foreign key

SQL && NoSQL SQL Structured Query Language...

Python & Celery 学习笔记_任务链结

Celery 提供任务链结的功能,字面上的意思,就是将任务一个一个串联在一起,下面的叙述 or 范例...