2017-11-06 3 views
1

Ich habe zwei Kontrollkästchen und beim Abschicken möchte ich dem Benutzer zwei verschiedene Dateien herunterladen, wie gehe ich darüber? Ich brauche Hilfe, da ich kein Online-Material dazu bekommen kann. Ich bin neu in diesem Rahmen.Scala liftweb framework

Dies ist, was ich

bisher versucht habe
def render = { 
def onSubmit1() : LiftResponse = { 
     val userInput1 = S.param("getit").openOr("") 
     val userInput2 = S.param("getit2").openOr("") 
     val checkbox1 = S.param("yes").openOr("") 
     val checkbox2 = S.param("yes").openOr("") 
val fileToDownload = funFile(as, art, top) 
     val fileName = "My File" 
if (fileToDownload.equals()) { 
     return S.redirectTo("/Somewhere") 
     } else { 
     InMemoryResponse(
      fileToDownload.mkString("\n").getBytes("UTF-8"), 
      "Content-Type" -> "text/plain; charset=utf8" :: 
      "Content-Disposition" -> s"attachment; filename=$fileName" :: Nil, 
      cookies = Nil, code = 200) 
     } 
"#submitButton" #> SHtml.onSubmitUnit(onSubmit1) 
+0

Ich glaube, Sie zip würde es durch Javascript tun müssen – nafg

Antwort

0

fand ich einen Weg, das zu tun, und das ist es, die beiden Dateien mit dieser Funktion How do I archive multiple files into a .zip file using scala?,

if (checkbox1.getOrElse("") == "checked" && checkbox2.getOrElse("") == "checked") { 
val checkboxIterable1: Iterable[String] = filegetter1 
     val checkboxFile1 = new File("checkboxFile1.csv") 
     using(new FileWriter(checkboxFile1))(writer => 
      fileGetter1.foreach { d => 
      writer.write(d) 
      }) 
     fileGetter1 

     val checkboxIterable2: Iterable[String] = fileGetter2 
     val checkboxFile2 = new File("checkboxFile2.csv") 
     using(new FileWriter(checkboxFile2))(writer => 
      fileGetter2.foreach { d => 
      writer.write(d) 
      }) 
     fileGetter2 

     val zipFile = zip("Zipped file", List("checkboxFile1.csv", "checkboxFile2.csv")) 
     val zipFileName = "Zipped file" 

     val zipToBArray = new BufferedInputStream(new FileInputStream(zipFileName)) 
     val getByteArray = Stream.continually(zipToBArray.read).takeWhile(-1 !=).map(_.toByte).toArray 

     InMemoryResponse(
      getByteArray, 
      "Content-Type" -> "application/zip; charset=utf8" :: 
      "Content-Disposition" -> s"attachment; filename=file.zip" :: Nil, 
      cookies = Nil, code = 200) 
     }