Index: lams_central/src/java/org/lamsfoundation/lams/web/QuestionsController.java =================================================================== diff -u -radd24141d43ff78942c251760e1614925db89464 -rf92b1383638a766c5d8496c6f607322dd2af8329 --- lams_central/src/java/org/lamsfoundation/lams/web/QuestionsController.java (.../QuestionsController.java) (revision add24141d43ff78942c251760e1614925db89464) +++ lams_central/src/java/org/lamsfoundation/lams/web/QuestionsController.java (.../QuestionsController.java) (revision f92b1383638a766c5d8496c6f607322dd2af8329) @@ -59,7 +59,6 @@ } else if (files.length == 1) { file = files[0]; packageName = file.getName().toLowerCase(); - ; } } @@ -107,6 +106,8 @@ ? QuestionParser.parseQTIFile(uploadedFileStream, null, limitType) : QuestionParser.parseQTIPackage(uploadedFileStream, limitType); request.setAttribute("questions", questions); + + FileUtil.deleteTmpFileUploadDir(tmpFileUploadId); return "questions/questionChoice"; } Index: lams_central/src/java/org/lamsfoundation/lams/web/qb/XmlQuestionsController.java =================================================================== diff -u -r95d202eb579f0171758a7409c9ae31b89ed5e91a -rf92b1383638a766c5d8496c6f607322dd2af8329 --- lams_central/src/java/org/lamsfoundation/lams/web/qb/XmlQuestionsController.java (.../XmlQuestionsController.java) (revision 95d202eb579f0171758a7409c9ae31b89ed5e91a) +++ lams_central/src/java/org/lamsfoundation/lams/web/qb/XmlQuestionsController.java (.../XmlQuestionsController.java) (revision f92b1383638a766c5d8496c6f607322dd2af8329) @@ -24,11 +24,11 @@ import org.lamsfoundation.lams.util.FileUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.multipart.MultipartFile; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.StaxDriver; @@ -54,7 +54,8 @@ * Initializes import questions page. */ @RequestMapping("/initImportQuestionsXml") - public String initImportQuestionsXml() throws ServletException { + public String initImportQuestionsXml(Model model) throws ServletException { + model.addAttribute("tmpFileUploadId", FileUtil.generateTmpFileUploadId()); return "qb/importQuestionsXml"; } @@ -64,24 +65,33 @@ @SuppressWarnings("unchecked") @RequestMapping(path = "/importQuestionsXml", method = RequestMethod.POST) @ResponseBody - public void importQuestionsXml(@RequestParam("UPLOAD_FILE") MultipartFile file, HttpServletRequest request, + public void importQuestionsXml(@RequestParam String tmpFileUploadId, HttpServletRequest request, @RequestParam long collectionUid) throws ServletException { List toolsErrorMsgs = new ArrayList<>(); try { - String uploadPath = FileUtil.createTempDirectory("_uploaded_2questions_xml"); + File file = null; + File uploadDir = FileUtil.getTmpFileUploadDir(tmpFileUploadId); + if (uploadDir.canRead()) { + File[] files = uploadDir.listFiles(); + if (files.length > 1) { + FileUtil.deleteTmpFileUploadDir(tmpFileUploadId); + throw new RuntimeException("Uploaded more than 1 file"); + } + if (files.length == 1) { + file = files[0]; + } + } // filename on the client - String filename = FileUtil.getFileName(file.getOriginalFilename()); - File destinationFile = new File(uploadPath, filename); - file.transferTo(destinationFile); - + String filename = FileUtil.getFileName(file.getName()); String fileExtension = FileUtil.getFileExtension(filename); if (!fileExtension.equalsIgnoreCase("xml")) { + FileUtil.deleteTmpFileUploadDir(tmpFileUploadId); throw new RuntimeException("Wrong file extension. Xml is expected"); } // import learning design - String fullFilePath = destinationFile.getAbsolutePath(); + String fullFilePath = file.getAbsolutePath(); // String learningDesignPath = ZipFileUtil.expandZip(new FileInputStream(designFile), filename2); // FileUtil.getFullPath(learningDesignPath, ExportToolContentService.LEARNING_DESIGN_FILE_NAME); List questions = (List) FileUtil.getObjectFromXML(null, fullFilePath); @@ -144,6 +154,8 @@ if (toolsErrorMsgs.size() > 0) { request.setAttribute("toolsErrorMessages", toolsErrorMsgs); } + + FileUtil.deleteTmpFileUploadDir(tmpFileUploadId); } /** Index: lams_central/web/qb/importQuestionsXml.jsp =================================================================== diff -u -r21555f88fd0c63a4a9eb3ae288a2e1d48452aa4b -rf92b1383638a766c5d8496c6f607322dd2af8329 --- lams_central/web/qb/importQuestionsXml.jsp (.../importQuestionsXml.jsp) (revision 21555f88fd0c63a4a9eb3ae288a2e1d48452aa4b) +++ lams_central/web/qb/importQuestionsXml.jsp (.../importQuestionsXml.jsp) (revision f92b1383638a766c5d8496c6f607322dd2af8329) @@ -3,55 +3,38 @@ <%@ page import="org.lamsfoundation.lams.util.Configuration" %> <%@ page import="org.lamsfoundation.lams.util.ConfigurationKeys" %> -<%@ page import="org.lamsfoundation.lams.util.FileValidatorUtil" %> +<%@ page import="org.lamsfoundation.lams.util.FileUtil" %> <%=Configuration.get(ConfigurationKeys.UPLOAD_FILE_LARGE_MAX_SIZE)%> -<%=FileValidatorUtil.formatSize(Configuration.getAsInt(ConfigurationKeys.UPLOAD_FILE_LARGE_MAX_SIZE))%> -<%=Configuration.get(ConfigurationKeys.EXE_EXTENSIONS)%> +<%=FileUtil.generateTmpFileUploadId()%> x + - + + + + + + + + + + + + @@ -76,18 +121,17 @@
?${csrfToken}&collectionUid=${param.collectionUid}" method="post" - enctype="multipart/form-data" id="importForm"> + id="importForm"> + - - - +
+