<form class="lift:form.ajax?form=post;multipart=true"> <div class="lift:MySnippet"> Name: <input name="name"><span class="lift:Msg?id=nameerror&errorClass=error">error</span><br> Image: <input id="image" name="image" class="text" type="text" /> <input type="submit" value="Add"> </div></form>
<form class="lift:form.ajax" form="POST" multipart="true">
object MySnippet { object fileName extends RequestVar[Box[String]](Full(Helpers.nextFuncName)) object imageFile extends RequestVar[Box[FileParamHolder]](Empty) var fileHolder : Box[FileParamHolder] = Empty def render = { var name = "item name" var image = "image path" def process(): JsCmd= { S.error("nameerror", "Name is empty"); Garbage.create.name(name).activeImageId(999).save Alert("fileHolder:" + fileHolder) } def onFileUpload(fph:FileParamHolder) = { println("onFileUpload called ********"); fileHolder = Box !! fph; } "name=name" #> SHtml.text(name, name = _, "id" -> "the_name") & "type=submit" #> SHtml.ajaxSubmit("Add", process) & "name=image" #> SHtml.fileUpload(onFileUpload) }}
package code.snippet
import net.liftweb.http._
import net.liftweb._
import common.Full
import util._
import net.liftweb.http.provider.servlet.HTTPServletContext
import code.model.resume
import java.io._
import net.liftweb.util._
import net.liftweb.common._
import java.util.Date
import code.model._
import code.lib.util._
class writingresume extends LiftScreen{
override protected def hasUploadField = true
val resumeupload = makeField[Array[Byte], Nothing]("Upload Resume: ", new Array[Byte](0),
field => SHtml.fileUpload(fph => storeFile(fph)),
NothingOtherValueInitializer)
var filename = ""
def storeFile (file : FileParamHolder): Box[File] =
{
getBaseApplicationPath match
{
case Full(appBasePath) =>
{
val d:Date = new Date()
filename = d.getTime+file.fileName
var uploadDir = new File(appBasePath + "uploads")
val uploadingFile = new File(uploadDir, filename)
var output = new FileOutputStream(uploadingFile)
try
{
output.write(file.file)
}
catch
{
case e => println(e)
}
finally
{
output.close
output = null
}
Full(uploadingFile)
}
case _ => Empty
}
}
def
getBaseApplicationPath: Box[String] =
{
LiftRules.context match
{
case context: HTTPServletContext =>
{
var baseApp: String = context.ctx.getRealPath("/")
if(!baseApp.endsWith(File.separator))
baseApp = baseApp + File.separator
Full(baseApp)
}
case _ => Empty
}
}
}
req.uploadedFiles