5.2.2 CS-IntelliJ: Accés a les dades
Farem accés als fitxers de Cloud Storage per a llegir-los, per a baixar-los. Mencionarem el fet de guardar fitxers, però no l'utilitzarem tant.
Ho farem per mig del mètode get() del bucket, al qual li passarem el nom del fitxer que volem llegir, i ens tornarà un blob (de cloud storage) amb el seu contingut.
val blob = bucket?.get(nomIm.getText())
Aquest blob podrem agafar-lo de dues maneres:
- Baixant-lo a un fitxer temporal amb el mètode downloadTo()
- Agafant-lo directament en memòria a un ByteBuffer de grandària suficient
- Agafant-lo directament en memòria a un ByteArray amb el mètode getContent() i aleshores no cal especificar cap grandària (potser siga el més còmode)
De la primera manera ho faríem així, baixem el fitxer a un fitxer auxiliar, i des d'alli el carreguem
// Primera manera de llegir, amb un fitxer auxiliar
val f = File("auxiliar")
blob?.downloadTo(FileOutputStream(f))
val image = ImageIO.read(f)
foto.setIcon(ImageIcon(image))
De la segona manera ens muntem un reader (de Cloud Storage) per poder carregar-ho en memòria a un ByteBuffer
//Segona manera de llegir: muntant un reader per a carregar a un ByteBuffer
val im = ByteBuffer.allocate(1024 * 1024)
blob?.reader()?.read(im)
val image = ImageIO.read(ByteArrayInputStream(im.array()))
foto.setIcon(ImageIcon(image))
La tercera manera, segurament és la més còmoda, amb el mètode getContent(), que ens torna el ByteArray. P
//Tercera manera de llegir: amb getContent per a carregar a un ByteArray
val im = blob?.getContent()
val image = ImageIO.read(im?.inputStream())
foto.setIcon(ImageIcon(image))
Qualsevol de les tres maneres ens hauria de funcionar bé, col·locant juntament amb la definició del blob en la funció que s'executa en apretar el botó, agafar(). I aquest seria el resultat:

Altres mètodes del bucket que ens poden interessar són:
- get(): agafa un fitxer, passant-li el nom i tornant un blob. És el que hem utiitzat.
- create(): serveix per a pujar un fitxer al bucket; se li passen 3 paràmetres, el nom que tindrà el fitxer en el Clousd Storage, el contingut que se li pot passar en forma de ByteArray o de InputStream, i el tipus de fitxer (per exemple "image/png")
- list(): torna un conjunt de blobs en forma de Page<Blob>. De cada element blob podrem baixar-nos el contingut a un fitxer auxiliar, a un ByteBuffer, agafar el seu nom, ...
Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial SenseObraDerivada 4.0