Bases de Dades
5.2.3 CS-IntelliJ: Tot l'exemple
Anem a ajuntar tot l'exemple que visualitza una imatge guardada en Cloud Storage, modificant-lo un poc:
- Ens guardarem els noms de les imatges en un JComboBox. I per a visualitzar la imatge, en compte d'un JLabel utilitzarem un JButton, així la imatge quedara centrada tan horitzontal com verticalment.
- Per a provar la pujada d'imatges, proposarem un segon nom a la imatge, i un botó. Si s'apreta es guardarà la imatge amb el nom proposat (o canviat), aprofitant l'extensió del nom per a posar el tipus d'imatge
El guardarem amb un altre nom, en el fitxer Kotlin Exemple_7_5_2_FirebaseCS_AgafarImatge.kt
import javax.swing.JFrame
import java.awt.EventQueue
import javax.swing.JComboBox
import java.awt.BorderLayout
import javax.swing.JPanel
import java.awt.FlowLayout
import java.io.FileInputStream
import com.google.firebase.FirebaseOptions
import com.google.auth.oauth2.GoogleCredentials
import com.google.firebase.FirebaseApp
import com.google.cloud.storage.Bucket
import com.google.firebase.cloud.StorageClient
import javax.imageio.ImageIO
import javax.swing.ImageIcon
import javax.swing.JButton
import javax.swing.JTextField
class AgafarImatge_2 : JFrame() {
val nomIm = JComboBox<String>()
val nomIm2 = JTextField(15)
val boto = JButton("Guardar còpia")
val foto = JButton()
var bucket: Bucket? = null
var im = byteArrayOf()
init {
defaultCloseOperation = JFrame.EXIT_ON_CLOSE
setBounds(100, 100, 900, 600)
setLayout(BorderLayout())
val panell1 = JPanel(FlowLayout())
panell1.add(nomIm)
getContentPane().add(panell1, BorderLayout.NORTH)
getContentPane().add(foto, BorderLayout.CENTER)
val panell2 = JPanel(FlowLayout())
panell2.add(nomIm2)
panell2.add(boto)
contentPane.add(panell2,BorderLayout.SOUTH)
val serviceAccount = FileInputStream("xat-ad-9f901-firebase-adminsdk-f1vja-ee7dc206de.json")
val options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.build()
FirebaseApp.initializeApp(options)
bucket = StorageClient.getInstance().bucket("xat-ad-9f901.appspot.com")
val blobs = bucket?.list()
for (b in blobs!!.iterateAll())
nomIm.addItem(b.getName())
nomIm.addActionListener { agafar() }
boto.addActionListener { guardar() }
}
fun agafar() {
// Instruccions per agafar la imatge
val blob = bucket?.get(nomIm.getSelectedItem().toString())
//Tercera manera de llegir: amb getContent per a carregar a un ByteArray
im = blob!!.getContent()
val image = ImageIO.read(im?.inputStream())
foto.setIcon(ImageIcon(image))
val nom = nomIm.getSelectedItem().toString().split(".")
nomIm2.text = nom[0]+"2."+nom[1]
}
fun guardar(){
bucket?.create(nomIm2.text,im,"image/"+nomIm2.text.split(".")[1])
}
}
fun main(args: Array<String>) {
EventQueue.invokeLater {
AgafarImatge_2().isVisible = true
}
}
I aquest seria el resultat:

Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial SenseObraDerivada 4.0