Skip to main content Skip to docs navigation

File Download

On this page
Stats
#callbacks:
object FileDownloadPageUploadedImage extends FSSessionVarOpt[FSUploadedFile]()

Download as byte array

Upload an image:

scala
import com.fastscala.components.bootstrap5.helpers.BSHelpers.*
FileDownloadPageUploadedImage.clear()
JS.rerenderable(rerenderer => implicit fsc => {
  div.apply {
    FileDownloadPageUploadedImage() match {
      case Some(uploadedFile) =>

        val fileDownloadUrl = fsc.fileDownloadByteArray(uploadedFile.name.replaceAll(".*\\.(\\w+)$", "uploaded.$1"), uploadedFile.contentType, () => uploadedFile.bytes())

        h3.apply("Uploaded image:") ++
          <img class="w-100" src={s"data:${uploadedFile.contentType};base64, " + Base64.getEncoder.encodeToString(uploadedFile.bytes())}></img>.mx_auto.my_4.d_block ++
          BSBtn().BtnPrimary.lbl("Download Uploaded File").href(fileDownloadUrl).btnLink.d_block
      case None =>
        h3.apply("Upload an image:") ++
          FileUploadHiddenTargetForm(
            uploadedFile => {
              FileDownloadPageUploadedImage() = uploadedFile.head
              rerenderer.rerender()
            })
    }
  }
}).render()

Stream to output stream

scala
import com.fastscala.components.bootstrap5.helpers.BSHelpers.*
val fileDownloadUrl = fsc.fileDownloadStreaming("numbers.txt", "text/plain", os => {
  val osw = new OutputStreamWriter(os)
  (1 to 7).foreach(i => {
    osw.write(i + "\n")
    osw.flush()
    Thread.sleep(1000)
  })
  osw.close()
})
BSBtn().BtnPrimary.lbl("Download numbers.txt").href(fileDownloadUrl).btnLink.d_block