@Override protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) { // Check we got a valid Multi-Part Form Upload FormData form = (FormData) req.parseContent(); if (form == null || !form.getIsMultiPart()) { throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Bad Upload"); } // Look for a file, we're quite flexible! File spreadsheet = null; for (FormData.FormField field : form.getFields()) { if (field.getIsFile()) { String ext = ".xls"; if (field.getFilename() != null && field.getFilename().endsWith(".xlsx")) { ext = ".xlsx"; } try { spreadsheet = TempFileProvider.createTempFile("spreadsheet", ext); FileOutputStream sout = new FileOutputStream(spreadsheet); IOUtils.copy(field.getInputStream(), sout); sout.close(); } catch (IOException e) { throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Upload Failed"); } break; } } // Process String[] sheetnames = null; if (spreadsheet != null) { try { sheetnames = excerpter.getSheetNames(spreadsheet); } catch (IOException e) { throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Spreadsheet Corrupt", e); } } else { throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Spreadsheet Missing"); } // Report Map<String, Object> model = new HashMap<String, Object>(); model.put("file", spreadsheet.getName()); model.put("sheets", sheetnames); return model; }