Index: lams_central/src/java/org/lamsfoundation/lams/web/LAMSConnectorServlet.java =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -rfd067e2f01c881d99c717983bdeb4ce64df77db2 --- lams_central/src/java/org/lamsfoundation/lams/web/LAMSConnectorServlet.java (.../LAMSConnectorServlet.java) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_central/src/java/org/lamsfoundation/lams/web/LAMSConnectorServlet.java (.../LAMSConnectorServlet.java) (revision fd067e2f01c881d99c717983bdeb4ce64df77db2) @@ -29,9 +29,10 @@ import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import org.apache.commons.fileupload.DiskFileUpload; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.IOUtils; import org.apache.log4j.Logger; import org.lamsfoundation.lams.authoring.web.AuthoringConstants; @@ -44,9 +45,9 @@ import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; +import org.springframework.util.FileCopyUtils; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; -import org.springframework.web.multipart.MultipartFile; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -306,30 +307,30 @@ if (LAMSConnectorServlet.debug) { log.debug("File save started"); } - String newName = ""; - DiskFileUpload upload = new DiskFileUpload(); - List items = upload.parseRequest(request); - Map fields = new HashMap(); + DiskFileItemFactory fileItemFactory = new DiskFileItemFactory(); + ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory); + List items = fileUpload.parseRequest(request); - Iterator iter = items.iterator(); + Map fields = new HashMap<>(); + Iterator iter = items.iterator(); while (iter.hasNext()) { - FileItem item = (FileItem) iter.next(); + FileItem item = iter.next(); if (item.isFormField()) { fields.put(item.getFieldName(), item.getString()); } else { fields.put(item.getFieldName(), item); } } - MultipartFile uplFile = (MultipartFile) fields.get("NewFile"); + FileItem uplFile = (FileItem) fields.get("NewFile"); String fileNameLong = uplFile.getName(); fileNameLong = fileNameLong.replace('\\', '/'); String[] pathParts = fileNameLong.split("/"); String fileName = pathParts[pathParts.length - 1]; // validate file size - boolean maxFilesizeExceededMessage = FileValidatorSpringUtil.validateFileSize(uplFile, true); + boolean maxFilesizeExceededMessage = FileValidatorSpringUtil.validateFileSize(uplFile.getSize(), true); if (!maxFilesizeExceededMessage) { //assign fileName an error message to be shown on a client side fileName = messageService.getMessage("errors.maxfilesize", @@ -357,7 +358,7 @@ counter++; } - uplFile.transferTo(pathToSave); + FileCopyUtils.copy(uplFile.getInputStream(), new FileOutputStream(pathToSave)); if (counter > 1) { retVal.append("201"); Index: lams_central/web/WEB-INF/web.xml =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -rfd067e2f01c881d99c717983bdeb4ce64df77db2 --- lams_central/web/WEB-INF/web.xml (.../web.xml) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_central/web/WEB-INF/web.xml (.../web.xml) (revision fd067e2f01c881d99c717983bdeb4ce64df77db2) @@ -47,14 +47,12 @@ org.tuckey.web.filters.urlrewrite.UrlRewriteFilter - SystemSessionFilter org.lamsfoundation.lams.web.session.SystemSessionFilter - hibernateFilter @@ -65,109 +63,106 @@ coreSessionFactory - LocaleFilter org.lamsfoundation.lams.web.filter.LocaleFilter + + springMultipartFilter + org.springframework.web.multipart.support.MultipartFilter + UrlRewriteFilter /signup/* REQUEST - SystemSessionFilter *.do - SystemSessionFilter *.jsp - SystemSessionFilter *.xml - SystemSessionFilter /servlet/* - SystemSessionFilter /ckeditor/* - hibernateFilter *.do - hibernateFilter *.jsp - hibernateFilter *.xml - hibernateFilter /servlet/* - hibernateFilter /services/* - hibernateFilter /ckeditor/* - hibernateFilter /LoginRequest - hibernateFilter /ForgotPasswordRequest - LocaleFilter *.do - LocaleFilter *.jsp - LocaleFilter *.xml - LocaleFilter /servlet/* - LocaleFilter /ckeditor/* + + springMultipartFilter + /ckeditor/filemanager/browser/default/connectors/jsp/connector + + + springMultipartFilter + /ckeditor/filemanager/upload/simpleuploader + + + springMultipartFilter + /questions.do + Index: lams_common/src/java/org/lamsfoundation/lams/util/UploadFileUtil.java =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -rfd067e2f01c881d99c717983bdeb4ce64df77db2 --- lams_common/src/java/org/lamsfoundation/lams/util/UploadFileUtil.java (.../UploadFileUtil.java) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_common/src/java/org/lamsfoundation/lams/util/UploadFileUtil.java (.../UploadFileUtil.java) (revision fd067e2f01c881d99c717983bdeb4ce64df77db2) @@ -24,13 +24,7 @@ package org.lamsfoundation.lams.util; import java.io.File; -import java.util.List; -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.fileupload.DiskFileUpload; -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileUploadException; import org.apache.log4j.Logger; /** @@ -51,100 +45,6 @@ } /** - * Given the current servlet request and the name of a temporary directory, get a list of all the uploaded items - * from a multipart form. This includes any uploaded files and the "normal" input fields on the form. Gets the - * temporary directory from the configuration file. Equivalent to getUploadItems(request, useLargeFileSize, null) - * - * @param request - * - current servlet request - * @param useLargeFileSize - * - use the large file size. If not true, use the standard file size. - * @return List of items, of type FileItem - */ - public static List getUploadItems(HttpServletRequest request, boolean useLargeFileSize) - throws FileUploadException, Exception { - return UploadFileUtil.getUploadItems(request, useLargeFileSize, null); - } - - /** - * Given the current servlet request and the name of a temporary directory, get a list of all the uploaded items - * from a multipart form. This includes any uploaded files and the "normal" input fields on the form. - * - * @param request - * - current servlet request - * @param useLargeFileSize - * - use the large file size. If not true, use the standard file size. - * @param tempDirName - * - the name of the directory into which temporary files can be written - * @return List of items, of type FileItem - */ - @SuppressWarnings("unchecked") - public static List getUploadItems(HttpServletRequest request, boolean useLargeFileSize, - String tempDirNameInput) throws FileUploadException, Exception { - - int max_size = UploadFileUtil.DEFAULT_MAX_SIZE; - int max_memory_size; - String tempDirName = null; - - int tempInt = -1; - - if (useLargeFileSize) { - tempInt = Configuration.getAsInt(ConfigurationKeys.UPLOAD_FILE_LARGE_MAX_SIZE); - if (tempInt != -1) { - max_size = tempInt; - } else { - UploadFileUtil.log.warn( - "Default Large Max Size for file upload missing, using " + UploadFileUtil.DEFAULT_MAX_SIZE); - } - } else { - tempInt = Configuration.getAsInt(ConfigurationKeys.UPLOAD_FILE_MAX_SIZE); - if (tempInt != -1) { - max_size = tempInt; - } else { - UploadFileUtil.log - .warn("Default Max Size for file upload missing, using " + UploadFileUtil.DEFAULT_MAX_SIZE); - } - } - - tempInt = Configuration.getAsInt(ConfigurationKeys.UPLOAD_FILE_MAX_MEMORY_SIZE); - if (tempInt != -1) { - max_memory_size = tempInt; - } else { - UploadFileUtil.log.warn( - "Default Max Memory Size for file upload missing, using " + UploadFileUtil.DEFAULT_MEMORY_SIZE); - max_memory_size = UploadFileUtil.DEFAULT_MEMORY_SIZE; - } - - if (tempDirNameInput != null) { - tempDirName = tempDirNameInput; - } else { - tempDirName = Configuration.get(ConfigurationKeys.LAMS_TEMP_DIR); - if (tempDirName == null) { - UploadFileUtil.log.warn("Default Temporary Directory missing, using null"); - } - } - // would be nice to only do this once! never mind. - if (tempDirName != null) { - File dir = new File(tempDirName); - if (!dir.exists()) { - dir.mkdirs(); - } - } - - // Create a new file upload handler - DiskFileUpload upload = new DiskFileUpload(); - - // Set upload parameters - upload.setSizeMax(max_size); - upload.setSizeThreshold(max_memory_size); - upload.setRepositoryPath(tempDirName); - - // Parse the request - List items = upload.parseRequest(request); - return items; - } - - /** * @return Maximum size (in megabytes) that a file may be. Standard size, use during running of sequence. */ public static float getMaxFileSize() { Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/AuthoringController.java =================================================================== diff -u -r7a37ae5049a14049cacb3d0d3423362ce92993e6 -rfd067e2f01c881d99c717983bdeb4ce64df77db2 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/AuthoringController.java (.../AuthoringController.java) (revision 7a37ae5049a14049cacb3d0d3423362ce92993e6) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/AuthoringController.java (.../AuthoringController.java) (revision fd067e2f01c881d99c717983bdeb4ce64df77db2) @@ -51,8 +51,6 @@ import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.fileupload.DiskFileUpload; -import org.apache.commons.fileupload.FileItem; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.log4j.Logger; @@ -86,6 +84,8 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.StaxDriver; @@ -1087,7 +1087,7 @@ * Imports questions into question bank from uploaded xml file. */ @RequestMapping("/importQuestions") - public String importQuestions(HttpServletRequest request) throws ServletException { + public String importQuestions(@RequestParam("UPLOAD_FILE") MultipartFile file, HttpServletRequest request) throws ServletException { String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession() .getAttribute(sessionMapID); @@ -1096,44 +1096,21 @@ List toolsErrorMsgs = new ArrayList<>(); try { - File designFile = null; - Map params = new HashMap<>(); - String filename = null; - String uploadPath = FileUtil.createTempDirectory("_uploaded_2questions_xml"); - DiskFileUpload fu = new DiskFileUpload(); - // maximum size that will be stored in memory - fu.setSizeThreshold(4096); - // the location for saving data that is larger than getSizeThreshold() - // fu.setRepositoryPath(uploadPath); + // filename on the client + String filename = FileUtil.getFileName(file.getOriginalFilename()); + File destinationFile = new File(uploadPath, filename); + file.transferTo(destinationFile); - List fileItems = fu.parseRequest(request); - Iterator iter = fileItems.iterator(); - while (iter.hasNext()) { - FileItem fi = (FileItem) iter.next(); - // UPLOAD_FILE is input field from HTML page - if (!fi.getFieldName().equalsIgnoreCase("UPLOAD_FILE")) { - params.put(fi.getFieldName(), fi.getString()); - } else { - // filename on the client - filename = FileUtil.getFileName(fi.getName()); - designFile = new File(uploadPath + filename); - fi.write(designFile); - } - } - - String filename2 = designFile.getName(); - String fileExtension = (filename2 != null) && (filename2.length() >= 4) - ? filename2.substring(filename2.length() - 4) - : ""; - if (!fileExtension.equalsIgnoreCase(".xml")) { + String fileExtension = FileUtil.getFileExtension(filename); + if (!fileExtension.equalsIgnoreCase("xml")) { throw new RuntimeException("Wrong file extension. Xml is expected"); } // String learningDesignPath = ZipFileUtil.expandZip(new FileInputStream(designFile), filename2); // import learning design - String fullFilePath = designFile.getAbsolutePath();// FileUtil.getFullPath(learningDesignPath, + String fullFilePath = destinationFile.getAbsolutePath();// FileUtil.getFullPath(learningDesignPath, // ExportToolContentService.LEARNING_DESIGN_FILE_NAME); List questions = (List) FileUtil.getObjectFromXML(null, fullFilePath);