File upload
Scooter framework provides easy APIs for file uploads. This document is based on the uploadexample under the examples/uploadexample directory.
File upload view
The file upload view is a regular HTML Form element with the multipart/form-data type. Developers can upload multiple files in the same request.
The name attribute in the input tag is used in the file upload controller class to retrieve the file.
<form name="filesForm" action="/uploadexample/files/upload" method="post" enctype="multipart/form-data"> File 1:<input type="file" name="file1"/><br/> File 2:<input type="file" name="file2"/><br/> File 3:<input type="file" name="file3"/><br/> <input type="submit" name="Submit" value="Upload Files"/> </form>
In this example, the upload request is going to be handled by the controller FilesController's upload() action method.
File upload controller class
Like all controller classes in Scooter framework, FilesController class uses static import to access many helper APIs provided by the ActionControl class.
import static com.scooterframework.web.controller.ActionControl.*; import com.scooterframework.web.controller.UploadFile; /** * FilesController class handles files related access. */ public class FilesController { public String upload() { try { UploadFile uf1 = pFile("file1"); uf1.writeTo(applicationPath() + "/static/docs"); flash("notice", "You have successfully uploaded a file."); setViewData("file", uf1.getFileName()); } catch (Exception ex) { flash("error", "There is a problem with upload."); } return null; } }
One of the most important file upload related APIs is the pFile(String key) method. It uses the value associated with the name attribute in the file upload jsp file and returns the uploaded file as an UploadFile instance.
UploadFile class
The UploadFile class contains methods for further processing of the uploaded file.
public String getFileName(); //get original uploaded file name public InputStream getInputStream(); //get uploaded file as an input stream public OutputStream getOutputStream(); //output uploaded file as an output stream public long getSize(); //get the total number of bytes of the uploaded file public void writeTo(File outputFile); //write the uploaded file to an output file public void writeTo(String dirPath); //write the uploaded file to a directory
More APIs from ActionControl class
The ActionControl class contains some useful static methods for file uploads.
public static boolean isFileUploadRequest(); //check if the request is a file-upload request public static ListpFiles(); //get a list of upload files public static Map pFilesMap(); //key is the name attribute in the HTTP form public static List getUploadFilesAsFiles(String fileRepository); //store all uploaded files to a file repository
Controlling file uploads
Scooter provides the following configurable properties in environment.properties file to control file uploads:
Property | Description |
---|---|
upload.file.repository | specifies a file directory for storing uploaded files when the item size exceed the threshold. The default value is null. |
maximum.bytes.per.uploaded.file.in.memory | specifies a threshold, in bytes, below which items will be retained in memory and above which they will be stored as a file. The default value is 10240 bytes. |
maximum.total.bytes.per.upload.request | specifies maximum allowed bytes of a complete upload request. The default value of -1 indicates, that there is no limit. |
maximum.bytes.per.uploaded.file | specifies maximum allowed bytes of a single upload file. The default value of -1 indicates, that there is no limit. |