If you have the Req (request), you can do: val req: Req = ... val theFile: Option[FileParamHolder] = req.uploadedFiles.find(_.name == "my_param_name")
On Tue, Dec 1, 2009 at 2:49 AM, DMB <[email protected]> wrote: > Just what I was looking for, thanks! > > By the way, is there a way to assign a "name" attribute to a file > upload input field? The reason is I have a legacy piece of code that > does HTTP uploads by simulating a form submit. This code requires that > the form field name be known in advance, for obvious reasons. > > On Nov 30, 9:26 pm, David Pollak <[email protected]> > wrote: > > Folks, > > > > Lately there's been a bunch of chatter on the list about image upload and > > figuring out how to put the image files in the right place to serve them > > again. > > > > I've written a simple example of image uploading, storing the image in > the > > RDBMS and then serving the image. You can find the code at: > http://github.com/dpp/imagine/ > > > > The file upload snippet is very simple: > > > > class DoUpload { > > private def saveFile(fp: FileParamHolder): Unit = { > > fp.file match { > > case null => > > case x if x.length == 0 => > > case x => > > val blob = ImageBlob.create.image(x).saveMe > > ImageInfo.create.name > > (fp.fileName).mimeType(fp.mimeType).blob(blob).saveMe > > S.notice("Thanks for the upload") > > S.redirectTo("/") > > } > > } > > > > def render(in: NodeSeq): NodeSeq = > > bind("upload", in, "file" -> SHtml.fileUpload(saveFile _)) > > > > } > > > > If the blob is uploaded, it's put in a row in ImageBlob and an ImageInfo > row > > is created to store the name and mime type. There are two different rows > so > > that one doesn't have to pull the whole blob back when you're checking > for > > the upload date. > > > > Serving the image is similarly concise: > > > > def serveImage: LiftRules.DispatchPF = { > > case req @ Req("images" :: _ :: Nil, _, GetRequest) if > > findFromRequest(req).isDefined => > > () => { > > val info = findFromRequest(req).open_! // open is valid here > because > > we just tested in the guard > > > > // Test for expiration > > req.testFor304(info.date, "Expires" -> toInternetDate(millis + > > 30.days)) or > > // load the blob and return it > > info.blob.obj.map(blob => InMemoryResponse(blob.image, > > List(("Last-Modified", toInternetDate(info.date.is)), > > > > ("Expires", toInternetDate(millis + 30.days)), > > > > ("Content-Type", info.mimeType.is)), Nil, 200)) > > } > > } > > > > If the request matches /images/xxx where xxx is a name in the ImageInfo > > table, check to see if we can return a 304 (not modified). If not, we > pull > > the blob from the database and return it. > > > > I hope this helps folks who are looking to manage and serve images. > > > > Thanks, > > > > David > > > > -- > > Lift, the simply functional web frameworkhttp://liftweb.net > > Beginning Scalahttp://www.apress.com/book/view/1430219890 > > Follow me:http://twitter.com/dpp > > Surf the harmonics > > -- > > You received this message because you are subscribed to the Google Groups > "Lift" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<liftweb%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/liftweb?hl=en. > > > -- Lift, the simply functional web framework http://liftweb.net Beginning Scala http://www.apress.com/book/view/1430219890 Follow me: http://twitter.com/dpp Surf the harmonics -- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
