Skip to content

Instantly share code, notes, and snippets.

@efleming969
Created February 12, 2010 15:59
Show Gist options
  • Save efleming969/302682 to your computer and use it in GitHub Desktop.
Save efleming969/302682 to your computer and use it in GitHub Desktop.
package sudo.samples.resources
import org.restlet.resource.{Get, Post}
import com.mongodb.gridfs.GridFS
import sudo.restly.core.{GridFSRepresentation, RestlyResource}
import org.restlet.ext.fileupload.RestletFileUpload
import org.apache.commons.fileupload.disk.DiskFileItemFactory
import scala.collection.JavaConversions._
import com.mongodb.{BasicDBObject, BasicDBObjectBuilder}
import org.restlet.representation.{Variant, Representation}
import org.restlet.data.MediaType
class FilesResource extends RestlyResource {
override def doInit() {
super.doInit
getVariants.add(new Variant(MediaType.TEXT_PLAIN))
getVariants.add(new Variant(MediaType.MULTIPART_FORM_DATA))
}
override def get(variant:Variant) = {
getLogger.info("get a list of files")
val gfs = new GridFS(mongo)
getJsonRepresentation(gfs.getFileList)
}
override def post(entity:Representation, variant:Variant) = {
getLogger.info("create a new file")
getLogger.info(variant.getMediaType.toString)
val basicDBObject = new BasicDBObject
variant.getMediaType match {
case MediaType.TEXT_PLAIN =>
val factory = new DiskFileItemFactory()
val fileUpload = new RestletFileUpload(factory)
val items = fileUpload.parseRequest(getRequest)
for(fi <- items) {
if(!fi.isFormField) {
val gfs = new GridFS(mongo)
val gfsFile = gfs.createFile(fi.getInputStream, fi.getName)
gfsFile.save
getLogger.info("file created: "+fi.getName)
basicDBObject.put("file", fi.getName)
basicDBObject.put("name", fi.getName)
basicDBObject.put("width", "0")
basicDBObject.put("height", "0")
basicDBObject.put("type", fi.getContentType)
basicDBObject.put("size", fi.getSize)
}
}
case _ =>
basicDBObject.put("message", "no file added")
}
getHtmlRepresentation(<textarea>{ basicDBObject.toString }</textarea>)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment