FileUploadSupport can be mixed into a org.scalatra.ScalatraFilter or org.scalatra.ScalatraServlet to provide easy access to data submitted as part of a multipart HTTP request. Commonly this is used for retrieving uploaded files.
Once the trait has been mixed into your handler, you need to enable multipart
configuration in your ''web.xml'' or by using @MultipartConfig
annotation. To
configure in ''web.xml'' add <multipart-config />
to your <servlet>
element. If you
prefer annotations instead, place @MultipartConfig
to your handler. Both ways
provide some further configuration options, such as specifying the max total request size
and max size for invidual files in the request. You might want to set these to prevent
users from uploading too large files.
When the configuration has been done, you can access any files using
fileParams("myFile")
where ''myFile'' is the name
of the parameter used to upload the file being retrieved. If you are
expecting multiple files with the same name, you can use
fileMultiParams("files[]")
to access them all.
To handle any errors that are caused by multipart handling, you need to configure an error handler to your handler class:
import org.scalatra.servlet.SizeLimitExceededException
import org.scalatra.servlet.FileUploadSupport
@MultipartConfig(maxFileSize=1024*1024)
class FileEaterServlet extends ScalatraServlet with FileUploadSupport {
error {
case e: SizeConstraintExceededException => "Oh, too much! Can't take it all."
case e: IOException => "Server denied me my meal, thanks anyway."
}
post("/eatfile") {
"Thanks! You just provided me " + fileParams("lunch").size + " bytes for a lunch."
}
}
}}* @note Once any handler with FileUploadSupport has accessed the request, the fileParams returned by FileUploadSupport will remain fixed for the lifetime of the request.
- Note:
Will not work on Jetty versions prior to 8.1.3. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=376324. The old scalatra-fileupload module still works for earlier versions of Jetty.
- Companion:
- object
Type members
Inherited classlikes
Inherited types
- Inherited from:
- ServletBase
Value members
Concrete methods
- Returns:
a Map, keyed on the names of multipart file upload parameters, of all multipart files submitted with the request
Handles a request and renders a response.
Handles a request and renders a response.
$ 1. If the request lacks a character encoding, defaultCharacterEncoding
is set to the request.
$ 2. Sets the response's character encoding to defaultCharacterEncoding
.
$ 3. Binds the current request
, response
, and multiParams
, and calls
executeRoutes()
.
- Definition Classes
Inherited methods
Adds a filter to run after the route. The filter only runs if each routeMatcher returns Some. If the routeMatchers list is empty, the filter runs for all routes.
Adds a filter to run after the route. The filter only runs if each routeMatcher returns Some. If the routeMatchers list is empty, the filter runs for all routes.
- Inherited from:
- ScalatraBase
Adds a filter to run before the route. The filter only runs if each routeMatcher returns Some. If the routeMatchers list is empty, the filter runs for all routes.
Adds a filter to run before the route. The filter only runs if each routeMatcher returns Some. If the routeMatchers list is empty, the filter runs for all routes.
- Inherited from:
- ScalatraBase
Gets the content type of the current response.
Gets the content type of the current response.
- Inherited from:
- ScalatraContext
Sets the content type of the current response.
Sets the content type of the current response.
- Inherited from:
- ScalatraContext
Defines an error handler for exceptions thrown in either the before block or a route action.
Defines an error handler for exceptions thrown in either the before block or a route action.
If the error handler does not match, the result falls through to the previously defined error handler. The default error handler simply rethrows the exception.
The error handler is run before the after filters, and the result is rendered like a standard response. It is the error handler's responsibility to set any appropriate status code.
- Inherited from:
- ScalatraBase
Explicitly sets the request-scoped format. This takes precedence over whatever was inferred from the request.
Explicitly sets the request-scoped format. This takes precedence over whatever was inferred from the request.
- Inherited from:
- ScalatraContext
Explicitly sets the request-scoped format. This takes precedence over whatever was inferred from the request.
Explicitly sets the request-scoped format. This takes precedence over whatever was inferred from the request.
- Inherited from:
- ScalatraContext
Builds a full URL from the given relative path. Takes into account the port configuration, https, ...
Builds a full URL from the given relative path. Takes into account the port configuration, https, ...
- Value parameters:
- path
a relative path
- Returns:
the full URL
- Inherited from:
- ScalatraBase
The Scalatra DSL core methods take a list of org.scalatra.RouteMatcher and a block as the action body. The return value of the block is rendered through the pipeline and sent to the client as the response body.
The Scalatra DSL core methods take a list of org.scalatra.RouteMatcher and a block as the action body. The return value of the block is rendered through the pipeline and sent to the client as the response body.
See org.scalatra.ScalatraBase#renderResponseBody for the detailed behaviour and how to handle your response body more explicitly, and see how different return types are handled.
The block is executed in the context of a CoreDsl instance, so all the methods defined in this trait are also available inside the block.
get("/") {
<form action="/echo">
<label>Enter your name</label>
<input type="text" name="name"/>
</form>
}
post("/echo") {
"hello {params('name)}!"
}
ScalatraKernel provides implicit transformation from boolean blocks, strings and regular expressions to org.scalatra.RouteMatcher, so you can write code naturally.
get("/", request.getRemoteHost == "127.0.0.1") { "Hello localhost!" }
- Inherited from:
- ScalatraBase
Immediately halts processing of a request. Can be called from either a before filter or a route.
Immediately halts processing of a request. Can be called from either a before filter or a route.
- Value parameters:
- body
a result to render through the render pipeline as the body
- headers
headers to add to the response
- status
the status to set on the response, or null to leave the status unchanged.
- Inherited from:
- Control
Gets an init parameter from the config.
Gets an init parameter from the config.
- Value parameters:
- name
the name of the key
- Returns:
an option containing the value of the parameter if defined, or
None
if the parameter is not set.- Inherited from:
- ScalatraBase
A hook to initialize the class with some configuration after it has been constructed.
A hook to initialize the class with some configuration after it has been constructed.
Not called init because GenericServlet doesn't override it, and then we get into https://lampsvn.epfl.ch/trac/scala/ticket/2497.
- Inherited from:
- HasMultipartConfig
A boolean flag representing whether the kernel is in development mode.
The default is true if the environment
begins with "dev", case-insensitive.
A boolean flag representing whether the kernel is in development mode.
The default is true if the environment
begins with "dev", case-insensitive.
- Inherited from:
- ScalatraBase
Defines a block to run if matching routes are found only for other methods. The set of matching methods is passed to the block.
Defines a block to run if matching routes are found only for other methods. The set of matching methods is passed to the block.
- Inherited from:
- ScalatraBase
The current multiparams. Multiparams are a result of merging the
standard request params (query string or post params) with the route
parameters extracted from the route matchers of the current route.
The default value for an unknown param is the empty sequence. Invalid
outside handle
.
The current multiparams. Multiparams are a result of merging the
standard request params (query string or post params) with the route
parameters extracted from the route matchers of the current route.
The default value for an unknown param is the empty sequence. Invalid
outside handle
.
- Inherited from:
- ScalatraBase
Defines a block to run if no matching routes are found, or if all matching routes pass.
Defines a block to run if no matching routes are found, or if all matching routes pass.
- Inherited from:
- ScalatraBase
Immediately exits from the current route.
Immediately exits from the current route.
- Inherited from:
- Control
Sends a redirect response and immediately halts the current action.
Sends a redirect response and immediately halts the current action.
- Inherited from:
- ScalatraBase
- Inherited from:
- ScalatraBase
The effective path against which routes are matched. The definition varies between servlets and filters.
The effective path against which routes are matched. The definition varies between servlets and filters.
- Inherited from:
- ScalatraBase
The servlet context in which this kernel runs.
The servlet context in which this kernel runs.
- Inherited from:
- ScalatraBase
The current session. If none exists, None is returned.
The current session. If none exists, None is returned.
- Inherited from:
- SessionSupport
A hook to shutdown the class. Bridges the gap between servlet's destroy and filter's destroy.
A hook to shutdown the class. Bridges the gap between servlet's destroy and filter's destroy.
- Inherited from:
- Initializable
Gets the status code of the current response.
Gets the status code of the current response.
- Inherited from:
- ScalatraContext
Sets the status code of the current response.
Sets the status code of the current response.
- Inherited from:
- ScalatraContext
- Inherited from:
- DefaultImplicitConversions
Error handler for HTTP response status code range. You can intercept every response code previously specified with #status or even generic 404 error.
Error handler for HTTP response status code range. You can intercept every response code previously specified with #status or even generic 404 error.
trap(403) {
"You are not authorized"
}
}*
}}
- Inherited from:
- ScalatraBase
Returns a context-relative, session-aware URL for a path and specified
parameters.
Finally, the result is run through response.encodeURL
for a session
ID, if necessary.
Returns a context-relative, session-aware URL for a path and specified
parameters.
Finally, the result is run through response.encodeURL
for a session
ID, if necessary.
- Value parameters:
- params
params, to be appended in the form of a query string
- path
the base path. If a path begins with '/', then the context path will be prepended to the result
- Returns:
the path plus the query string, if any. The path is run through
response.encodeURL
to add any necessary session tracking parameters.- Inherited from:
- ScalatraBase
Executes the block with the given request bound to the request
method.
Executes the block with the given request bound to the request
method.
- Inherited from:
- DynamicScope
Executes the block with the given response bound to the response
method.
Executes the block with the given response bound to the response
method.
- Inherited from:
- DynamicScope
Inherited fields
The configuration, typically a ServletConfig or FilterConfig.
The configuration, typically a ServletConfig or FilterConfig.
- Inherited from:
- ScalatraBase
The routes registered in this kernel.
The routes registered in this kernel.
- Inherited from:
- ScalatraBase
Implicits
Inherited implicits
- Inherited from:
- DefaultImplicitConversions
The currently scoped request. Valid only inside the handle
method.
The currently scoped request. Valid only inside the handle
method.
- Inherited from:
- DynamicScope
The currently scoped response. Valid only inside the handle
method.
The currently scoped response. Valid only inside the handle
method.
- Inherited from:
- DynamicScope
Implicit convert a (String) => Option[T]
function into a TypeConverter[T]
Implicit convert a (String) => Option[T]
function into a TypeConverter[T]
- Inherited from:
- TypeConverterSupport
- Inherited from:
- DefaultImplicitConversions
- Inherited from:
- DefaultImplicitConversions
The current session. Creates a session if none exists.
The current session. Creates a session if none exists.
- Inherited from:
- SessionSupport