2014-11-03 24 views
6

Quindi, in pratica, voglio creare un file temporaneo da un contenuto di stringa base64. In questo momento, lo sto facendo con le funzioni native java-io. Ma mi piacerebbe ottenere lo stesso risultato usando la libreria rapture-io per scala.Creare un file temporaneo da una stringa base64 con rapture-io

Quindi la mia domanda sarebbe, è possibile ottenere questo con rapture-io, e se sì, come?

ho già andato attraverso la documentazione, ma non è abbastanza preciso:

https://github.com/propensive/rapture-io/blob/master/doc/introduction.md

Ecco il mio codice vero e proprio:

import org.apache.commons.codec.binary.Base64 
import java.io.FileOutputStream 
import java.io.File 

val data: String = base64StringContent //Base64 String content of the file. 
val fileName = myFileName 
val fileExt = myFileExt 

//It does write the file in my temp folder. 
val file: File = File.createTempFile(fileName, fileExt) 
val fileByteArray: Array[Byte] = Base64.decodeBase64(data) 
val fileOutFile: FileOutputStream = new FileOutputStream(file) 
fileOutFile.write(fileByteArray) 
fileOutFile.close() 
file.deleteOnExit() 
file 

risposta

1

fa questo lavoro per voi?

import rapture.fs.platform.posix 
import rapture.io._ 
import rapture.core._ 
import rapture.fs._ 
import strategy.throwExceptions 

val tmpFile = (File/"tmp").tempFile(prefix = "yourfileName",suffix = ".extension") 
"data" >> tmpFile 
tmpFile.deleteOnExit() 
tmpFile.delete() 

Non testato su Windows. Potrebbe essere necessario utilizzare un separatore diverso, ad es. \\ invece di/

import rapture.fs.platform.windows 
import rapture.io._ 
import rapture.core._ 
import rapture.fs._ 
import strategy.throwExceptions 

val tmpFile = (File/"C:"/"Windows"/"Temp").tempFile(prefix = "yourfileName",suffix = ".extension") 
"data" >> tmpFile 
tmpFile.deleteOnExit() 
tmpFile.delete() 
+0

Ciao! Grazie per la tua risposta! Il codice sta entrando nella riga "val tmpFile ...", ottenendo: "Il sistema non riesce a trovare il percorso specificato". Sono in windows env ... Devo cambiarlo per qualsiasi altra cartella/percorso? Qualche altra alternativa che potrebbe funzionare per entrambi gli Env? (Sto pensando di eseguirlo in Heroku) – mayacr86

+0

Vedere la risposta modificata per una soluzione non testata. Immagino che dovrai importare condizionalmente la piattaforma basandoti su qualche altra informazione. È possibile inserire la piattaforma in un file di configurazione o basare la query su System.properties. È anche possibile creare in modo condizionale il fileUrl in base al tipo di piattaforma. – bearrito

+0

Windows route funzionava così, bastava aggiungere ":" dopo la "C". Ma ecco la cosa ... È creare il file nella mia cartella 'Temp', ma tutti sono "corrotti". Suppongo che "data" sia il mio valore di stringa base64, giusto? ("dati" >> tmpFile) – mayacr86