List of usage examples for org.springframework.web.multipart MultipartFile getInputStream
@Override
InputStream getInputStream() throws IOException;
From source file:com.citrix.cpbm.portal.fragment.controllers.AbstractTenantController.java
@Override protected String writeMultiPartFileToLocalFile(String imageFolder, String relativeImageDir, MultipartFile multipartFile) throws IOException { File file = new File(FilenameUtils.concat(imageFolder, relativeImageDir)); if (!file.exists()) { file.mkdir();//from w w w . j a v a 2 s.c om } String fileRelativePath = FilenameUtils.concat(relativeImageDir, FilenameUtils.getName(multipartFile.getOriginalFilename())); String logoFilelocalPath = FilenameUtils.concat(imageFolder, fileRelativePath); FileOutputStream outputStream = new FileOutputStream(logoFilelocalPath); InputStream inputStream = multipartFile.getInputStream(); byte buf[] = new byte[1024]; int len; while ((len = inputStream.read(buf)) > 0) { outputStream.write(buf, 0, len); } outputStream.close(); inputStream.close(); return fileRelativePath; }
From source file:net.duckling.ddl.web.sync.FileContentController.java
private void doSingleUpload(HttpServletRequest request, HttpServletResponse response, MultipartFile file, PathName pathName, String mode, int fver) { Context ctx = ContextUtil.retrieveContext(request); String device = ctx.getDevice(); String uid = ctx.getUid();/*from w ww . ja v a2 s .c o m*/ int tid = ctx.getTid(); long size = file.getSize(); // ? Resource parentResource = folderPathService.getResourceByPath(tid, pathName.getContextPath()); if (parentResource == null) { JsonResponse.notFound(response); return; } if (pathName.getName().endsWith(".ddoc")) { String title = pathName.getName().substring(0, pathName.getName().length() - ".ddoc".length()); List<Resource> resources = resourceService.getResourceByTitle(tid, parentResource.getRid(), LynxConstants.TYPE_PAGE, title); Resource resource = CollectionUtils.isEmpty(resources) ? null : resources.get(0); if (resource != null) { JsonResponse.sameFileExisted(response); return; } int rid = resourceOperateService.createNewPage(parentResource.getRid(), title, tid, uid); FileMeta meta = fileMetaService.get(tid, Long.valueOf(rid)); meta.setUploadDevice(device); JsonResponse.fileMeta(response, meta); return; } List<Resource> resources = resourceService.getResourceByTitle(tid, parentResource.getRid(), LynxConstants.TYPE_FILE, pathName.getName()); Resource resource = CollectionUtils.isEmpty(resources) ? null : resources.get(0); if (mode.equals("add")) { if (resource != null) { FileMeta meta = fileMetaService.get(tid, Long.valueOf(resource.getRid())); JsonResponse.fileVersionConflict(response, meta); return; } } else if (mode.equals("update")) { if (resource != null) { int existedFileVersion = resource.getLastVersion(); if (fver != existedFileVersion) { FileMeta meta = fileMetaService.get(tid, Long.valueOf(resource.getRid())); JsonResponse.fileVersionConflict(response, meta); return; } } } else if (mode.equals("overwrite")) { // Do nothing. } FileVersion fv = null; try { fv = resourceOperateService.upload(uid, tid, parentResource.getRid(), pathName.getName(), size, file.getInputStream(), true, true, false, null, device); } catch (IOException e) { JsonResponse.error(response); LOG.error(e.getMessage()); return; } catch (NoEnoughSpaceException e) { JsonResponse.error(response); } finally { try { file.getInputStream().close(); } catch (IOException ignored) { } } if (fv != null) { // ?? FileMeta meta = fileMetaService.get(tid, Long.valueOf(fv.getRid())); meta.setUploadDevice(device); JsonResponse.fileMeta(response, meta); } else { JsonResponse.error(response); } }
From source file:com.ephesoft.dcma.workflow.service.webservices.EphesoftWebServiceAPI.java
@RequestMapping(value = "/runReporting", method = RequestMethod.POST) @ResponseBody//w ww. ja va 2 s . co m public void runReporting(final HttpServletRequest req, final HttpServletResponse resp) { logger.info("Start processing the run reporting web service"); String respStr = WebServiceUtil.EMPTY_STRING; try { if (req instanceof DefaultMultipartHttpServletRequest) { InputStream instream = null; final DefaultMultipartHttpServletRequest multiPartRequest = (DefaultMultipartHttpServletRequest) req; final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap(); for (final String fileName : fileMap.keySet()) { final MultipartFile multiPartFile = multiPartRequest.getFile(fileName); instream = multiPartFile.getInputStream(); final Source source = XMLUtil.createSourceFromStream(instream); final ReportingOptions option = (ReportingOptions) batchSchemaDao.getJAXB2Template() .getJaxb2Marshaller().unmarshal(source); final String installerPath = option.getInstallerPath(); if (installerPath == null || installerPath.isEmpty() || !installerPath.toLowerCase().contains("build.xml")) { respStr = "Improper input to server. Installer path not specified or it does not contain the build.xml path."; } else { logger.info("synchronizing the database"); reportingService.syncDatabase(installerPath); break; } } } else { respStr = "Improper input to server. Expected multipart request. Returning without processing the results."; } } catch (final XmlMappingException xmle) { respStr = "Error in mapping input XML in the desired format. Please send it in the specified format. Detailed exception is " + xmle; } catch (final Exception e) { respStr = "Internal Server error.Please check logs for further details." + e; } if (!respStr.isEmpty()) { try { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr); } catch (final IOException ioe) { } } }
From source file:com.ephesoft.dcma.workflow.service.webservices.EphesoftWebServiceAPI.java
@RequestMapping(value = "/importBatchClass", method = RequestMethod.POST) @ResponseBody/*from www. j a va 2 s .c o m*/ public void importBatchClass(final HttpServletRequest req, final HttpServletResponse resp) { String respStr = WebServiceUtil.EMPTY_STRING; logger.info("Start processing import batch class web service"); String workingDir = WebServiceUtil.EMPTY_STRING; if (req instanceof DefaultMultipartHttpServletRequest) { InputStream instream = null; OutputStream outStream = null; final String webServiceFolderPath = bsService.getWebServicesFolderPath(); final DefaultMultipartHttpServletRequest mPartReq = (DefaultMultipartHttpServletRequest) req; final MultiValueMap<String, MultipartFile> fileMap = mPartReq.getMultiFileMap(); if (fileMap.size() == 2) { try { workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath); ImportBatchClassOptions option = null; String zipFilePath = WebServiceUtil.EMPTY_STRING; for (final String fileName : fileMap.keySet()) { final MultipartFile f = mPartReq.getFile(fileName); instream = f.getInputStream(); if (fileName.toLowerCase().indexOf(FileType.XML.getExtension().toLowerCase()) > -1) { final Source source = XMLUtil.createSourceFromStream(instream); option = (ImportBatchClassOptions) batchSchemaDao.getJAXB2Template() .getJaxb2Marshaller().unmarshal(source); continue; } else if (fileName.toLowerCase().indexOf(FileType.ZIP.getExtension().toLowerCase()) > -1) { zipFilePath = workingDir + File.separator + fileName; logger.info("Zip file is using for importing batch class is " + zipFilePath); final File file = new File(zipFilePath); outStream = new FileOutputStream(file); final byte[] buf = new byte[WebServiceUtil.bufferSize]; int len; while ((len = instream.read(buf)) > 0) { outStream.write(buf, 0, len); } continue; } } if (option != null && !zipFilePath.isEmpty()) { final Map<Boolean, String> results = importBatchService.validateInputXML(option); final String errorMessg = results.get(Boolean.FALSE); if (errorMessg != null && !errorMessg.isEmpty()) { respStr = errorMessg; } else { final File tempZipFile = new File(zipFilePath); final String tempOutputUnZipDir = tempZipFile.getParent() + File.separator + tempZipFile .getName().substring(0, tempZipFile.getName().indexOf(WebServiceUtil.DOT)); try { FileUtils.unzip(tempZipFile, tempOutputUnZipDir); } catch (final Exception e) { FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); tempZipFile.delete(); resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Unable to unzip file. Returning without processing the results."); } option.setZipFilePath(tempOutputUnZipDir); logger.info("Importing batch class"); final boolean isDeployed = deploymentService.isDeployed(option.getName()); final Map<Boolean, String> resultsImport = importBatchService.importBatchClass(option, isDeployed, true, null); final String errorMessgImport = resultsImport.get(Boolean.FALSE); if (errorMessgImport != null && !errorMessgImport.isEmpty()) { respStr = errorMessgImport; } } } else { respStr = "Improper input to the server.Proceeding without processing"; } } catch (final XmlMappingException xmle) { respStr = "Error in mapping input XML in the desired format. Please send it in the specified format. Detailed exception is " + xmle; } catch (final Exception e) { respStr = "Internal Server error.Please check logs for further details." + e.getMessage(); } finally { IOUtils.closeQuietly(instream); IOUtils.closeQuietly(outStream); FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); } } else { respStr = "Improper input to server. Expected two files: zip and xml file. Returning without processing the results."; } } else { respStr = "Improper input to server. Expected multipart request. Returning without processing the results."; } if (!workingDir.isEmpty()) { FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); } if (!respStr.isEmpty()) { try { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr); } catch (final IOException ioe) { } } }
From source file:com.ephesoft.dcma.workflow.service.webservices.EphesoftWebServiceAPI.java
@RequestMapping(value = "/extractFieldFromHocr", method = RequestMethod.POST) @ResponseBody/*from ww w . ja v a2s . c o m*/ public void extractFieldFromHocr(final HttpServletRequest req, final HttpServletResponse resp) { logger.info("Start processing web service for extractFieldFromHocr."); String respStr = WebServiceUtil.EMPTY_STRING; String workingDir = WebServiceUtil.EMPTY_STRING; if (req instanceof DefaultMultipartHttpServletRequest) { try { final String webServiceFolderPath = bsService.getWebServicesFolderPath(); workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath); InputStream instream = null; OutputStream outStream = null; final DefaultMultipartHttpServletRequest multipartReq = (DefaultMultipartHttpServletRequest) req; String fieldValue = WebServiceUtil.EMPTY_STRING; for (final Enumeration<String> params = multipartReq.getParameterNames(); params .hasMoreElements();) { final String paramName = params.nextElement(); if (paramName.equalsIgnoreCase("fieldValue")) { fieldValue = multipartReq.getParameter(paramName); break; } } if (fieldValue == null || fieldValue.isEmpty()) { respStr = "Field Value not specified."; } if (respStr.isEmpty()) { final MultiValueMap<String, MultipartFile> fileMap = multipartReq.getMultiFileMap(); if (fileMap.size() == 1) { String hocrFileName = ""; for (final String fileName : fileMap.keySet()) { // only single html file is expected as input if (fileName.toLowerCase().indexOf(FileType.HTML.getExtension()) > -1) { // only HTML file is expected hocrFileName = fileName; final MultipartFile f = multipartReq.getFile(fileName); instream = f.getInputStream(); final File file = new File(workingDir + File.separator + fileName); outStream = new FileOutputStream(file); final byte buf[] = new byte[1024]; int len; while ((len = instream.read(buf)) > 0) { outStream.write(buf, 0, len); } if (instream != null) { instream.close(); } if (outStream != null) { outStream.close(); } break; } else { respStr = "Improper input to server. Expected only one html file. Returning without processing the results."; } } if (respStr.isEmpty()) { String fileName = workingDir + File.separator + hocrFileName; // generate hocr file from html file. HocrPages hocrPages = new HocrPages(); List<HocrPage> hocrPageList = hocrPages.getHocrPage(); HocrPage hocrPage = new HocrPage(); String pageID = "PG0"; hocrPage.setPageID(pageID); hocrPageList.add(hocrPage); bsService.hocrGenerationAPI(workingDir, "PG0", fileName, hocrPage); List<KVExtraction> kvExtractionList = kvFieldService.createKeyValueFieldAPI(fieldValue, hocrPage); final KVExtractionFieldPatterns patterns = new KVExtractionFieldPatterns(); final List<KVExtractionFieldPattern> pattern = patterns.getKVExtractionFieldPattern(); for (final KVExtraction eachKVExtraction : kvExtractionList) { final KVExtractionFieldPattern kvField = new KVExtractionFieldPattern(); kvField.setDistance(eachKVExtraction.getDistance()); kvField.setFetchValue(eachKVExtraction.getFetchValue().name()); kvField.setKeyPattern(eachKVExtraction.getKeyPattern()); kvField.setLength(eachKVExtraction.getLength()); kvField.setLocation(eachKVExtraction.getLocationType().name()); kvField.setMultiplier(eachKVExtraction.getMultiplier()); kvField.setNoOfWords(eachKVExtraction.getNoOfWords() == null ? 0 : eachKVExtraction.getNoOfWords()); kvField.setValuePattern(eachKVExtraction.getValuePattern()); kvField.setWidth(eachKVExtraction.getWidth()); kvField.setXOffset(eachKVExtraction.getXoffset()); kvField.setYOffset(eachKVExtraction.getYoffset()); pattern.add(kvField); } StreamResult result; try { result = new StreamResult(resp.getOutputStream()); resp.setStatus(HttpServletResponse.SC_OK); batchSchemaDao.getJAXB2Template().getJaxb2Marshaller().marshal(patterns, result); } catch (final IOException e) { try { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Internal Server error.Please check logs for further details." + e.getMessage()); } catch (final IOException ioe) { } } } } else { respStr = "Improper input to server. Expected only one html file. Returning without processing the results."; } } } catch (final DCMAException dcmae) { respStr = "Error in processing request. Detailed exception is " + dcmae; } catch (final Exception e) { respStr = "Internal Server error.Please check logs for further details." + e; if (!workingDir.isEmpty()) { FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); } } } else { respStr = "Improper input to server. Expected multipart request. Returing without processing the results."; } if (!workingDir.isEmpty()) { FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); } if (!respStr.isEmpty()) { try { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr); } catch (final IOException ioe) { } } }
From source file:com.ephesoft.dcma.workflow.service.webservices.EphesoftWebServiceAPI.java
@RequestMapping(value = "/createMultiPageFile", method = RequestMethod.POST) @ResponseBody//from w ww .j av a 2 s.c o m public void createMultiPageFile(final HttpServletRequest req, final HttpServletResponse resp) { logger.info("Start processing web service for createMultiPageFile."); String respStr = WebServiceUtil.EMPTY_STRING; String workingDir = WebServiceUtil.EMPTY_STRING; if (req instanceof DefaultMultipartHttpServletRequest) { try { final String webServiceFolderPath = bsService.getWebServicesFolderPath(); workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath); final String outputDir = WebServiceUtil.createWebServiceOutputDir(workingDir); InputStream instream = null; OutputStream outStream = null; final DefaultMultipartHttpServletRequest multiPartRequest = (DefaultMultipartHttpServletRequest) req; final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap(); String xmlFileName = WebServiceUtil.EMPTY_STRING; List<File> fileList = new ArrayList<File>(); for (final String fileName : fileMap.keySet()) { if (fileName.endsWith(FileType.XML.getExtensionWithDot()) || fileName.endsWith(FileType.TIF.getExtensionWithDot()) || fileName.endsWith(FileType.TIFF.getExtensionWithDot())) { final File file = new File(workingDir + File.separator + fileName); if (fileName.endsWith(FileType.XML.getExtensionWithDot())) { xmlFileName = fileName; } else { fileList.add(file); } final MultipartFile multiPartFile = multiPartRequest.getFile(fileName); instream = multiPartFile.getInputStream(); outStream = new FileOutputStream(file); final byte[] buf = new byte[WebServiceUtil.bufferSize]; int len; while ((len = instream.read(buf)) > 0) { outStream.write(buf, 0, len); } if (instream != null) { instream.close(); } if (outStream != null) { outStream.close(); } } else { respStr = "Expected only tif, tiff files."; } } if (respStr.isEmpty()) { final File xmlFile = new File(workingDir + File.separator + xmlFileName); final FileInputStream inputStream = new FileInputStream(xmlFile); Source source = XMLUtil.createSourceFromStream(inputStream); final WebServiceParams webServiceParams = (WebServiceParams) batchSchemaDao.getJAXB2Template() .getJaxb2Marshaller().unmarshal(source); if (webServiceParams.getParams() == null || webServiceParams.getParams().getParam() == null || webServiceParams.getParams().getParam().isEmpty()) { FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); respStr = "Improper input to server. Parameter XML is incorrect. Returning without processing the results."; } else { List<Param> paramList = webServiceParams.getParams().getParam(); String imageProcessingAPI = WebServiceUtil.EMPTY_STRING; String pdfOptimizationParams = WebServiceUtil.EMPTY_STRING; String multipageTifSwitch = WebServiceUtil.EMPTY_STRING; String pdfOptimizationSwitch = WebServiceUtil.EMPTY_STRING, ghostscriptPdfParameters = WebServiceUtil.EMPTY_STRING; for (final Param param : paramList) { if (param.getName().equalsIgnoreCase("imageProcessingAPI")) { imageProcessingAPI = param.getValue(); continue; } if (param.getName().equalsIgnoreCase("pdfOptimizationParams")) { pdfOptimizationParams = param.getValue(); continue; } if (param.getName().equalsIgnoreCase("multipageTifSwitch")) { multipageTifSwitch = param.getValue(); continue; } if (param.getName().equalsIgnoreCase("pdfOptimizationSwitch")) { pdfOptimizationSwitch = param.getValue(); continue; } if (param.getName().equalsIgnoreCase("ghostscriptPdfParameters")) { ghostscriptPdfParameters = param.getValue(); continue; } } String results = WebServiceUtil.validateCreateMultiPageFile(ghostscriptPdfParameters, imageProcessingAPI, pdfOptimizationSwitch, multipageTifSwitch, pdfOptimizationParams); if (!results.isEmpty()) { respStr = results; } else { imService.createMultiPageFilesAPI(ghostscriptPdfParameters, pdfOptimizationParams, multipageTifSwitch, imageProcessingAPI, pdfOptimizationSwitch, workingDir, outputDir, fileList, new File(workingDir).getName() + Math.random()); ServletOutputStream out = null; ZipOutputStream zout = null; final String zipFileName = WebServiceUtil.serverOutputFolderName; resp.setContentType("application/x-zip\r\n"); resp.setHeader("Content-Disposition", "attachment; filename=\"" + zipFileName + FileType.ZIP.getExtensionWithDot() + "\"\r\n"); try { out = resp.getOutputStream(); zout = new ZipOutputStream(out); FileUtils.zipDirectory(outputDir, zout, zipFileName); resp.setStatus(HttpServletResponse.SC_OK); } catch (final IOException e) { respStr = "Unable to process web service request.Please try again." + e; } finally { if (zout != null) { zout.close(); } if (out != null) { out.flush(); } FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); } } } } } catch (final XmlMappingException xmle) { respStr = "Error in mapping input XML in the desired format. Please send it in the specified format. Detailed exception is " + xmle; } catch (final DCMAException dcmae) { respStr = "Error in processing request. Detailed exception is " + dcmae; } catch (final Exception e) { respStr = "Internal Server error.Please check logs for further details." + e; if (!workingDir.isEmpty()) { FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); } } } else { respStr = "Improper input to server. Expected multipart request. Returning without processing the results."; } if (!workingDir.isEmpty()) { FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); } if (!respStr.isEmpty()) { try { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr); } catch (final IOException ioe) { } } }
From source file:com.ephesoft.dcma.workflow.service.webservices.EphesoftWebServiceAPI.java
@RequestMapping(value = "/convertTiffToPdf", method = RequestMethod.POST) @ResponseBody//from ww w. j a v a 2 s . com public void convertTiffToPdf(final HttpServletRequest req, final HttpServletResponse resp) { logger.info("Start processing web service for extract fuzzy DB for given HOCR file"); String respStr = ""; String workingDir = ""; if (req instanceof DefaultMultipartHttpServletRequest) { try { final String webServiceFolderPath = bsService.getWebServicesFolderPath(); workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath); final String outputDir = WebServiceUtil.createWebServiceOutputDir(workingDir); InputStream instream = null; OutputStream outStream = null; final DefaultMultipartHttpServletRequest multiPartRequest = (DefaultMultipartHttpServletRequest) req; final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap(); if (!fileMap.keySet().isEmpty()) { for (final String fileName : fileMap.keySet()) { if (fileName.endsWith(FileType.TIF.getExtensionWithDot()) || fileName.endsWith(FileType.TIFF.getExtensionWithDot())) { } else { respStr = "Invalid file. Please passed the valid tif/tiff file"; break; } final MultipartFile multiPartFile = multiPartRequest.getFile(fileName); instream = multiPartFile.getInputStream(); final File file = new File(workingDir + File.separator + fileName); outStream = new FileOutputStream(file); final byte[] buf = new byte[WebServiceUtil.bufferSize]; int len; while ((len = instream.read(buf)) > 0) { outStream.write(buf, 0, len); } if (instream != null) { instream.close(); } if (outStream != null) { outStream.close(); } } } else { respStr = "Please passed the input files for processing"; } if (respStr.isEmpty()) { String inputParams = WebServiceUtil.EMPTY_STRING; String outputParams = WebServiceUtil.EMPTY_STRING; String pdfGeneratorEngine = WebServiceUtil.EMPTY_STRING; for (final Enumeration<String> params = multiPartRequest.getParameterNames(); params .hasMoreElements();) { final String paramName = params.nextElement(); if (paramName.equalsIgnoreCase("inputParams")) { inputParams = multiPartRequest.getParameter(paramName); logger.info("Value for batchClassIdentifier parameter is " + inputParams); continue; } if (paramName.equalsIgnoreCase("outputParams")) { outputParams = multiPartRequest.getParameter(paramName); logger.info("Value for hocrFile parameter is " + outputParams); continue; } if (paramName.equalsIgnoreCase("pdfGeneratorEngine")) { pdfGeneratorEngine = multiPartRequest.getParameter(paramName); logger.info("Value for hocrFile parameter is " + pdfGeneratorEngine); continue; } } respStr = WebServiceUtil.validateConvertTiffToPdfAPI(pdfGeneratorEngine, inputParams, outputParams); if (respStr.isEmpty()) { Set<String> outputFileList = new HashSet<String>(); File file = new File(workingDir); String[] fileList = file.list(new CustomFileFilter(false, FileType.TIF.getExtensionWithDot(), FileType.TIFF.getExtensionWithDot())); BatchInstanceThread batchInstanceThread = new BatchInstanceThread(workingDir); for (String inputFile : fileList) { String[] fileArray = new String[2]; String outputFile = inputFile.substring(0, inputFile.lastIndexOf(WebServiceUtil.DOT)) + FileType.PDF.getExtensionWithDot(); fileArray[0] = workingDir + File.separator + inputFile; fileArray[1] = workingDir + File.separator + outputFile; outputFileList.add(outputFile); imService.createTifToPDF(pdfGeneratorEngine, fileArray, batchInstanceThread, inputParams, outputParams); } batchInstanceThread.execute(); for (String outputFile : outputFileList) { FileUtils.copyFile(new File(workingDir + File.separator + outputFile), new File(outputDir + File.separator + outputFile)); } ServletOutputStream out = null; ZipOutputStream zout = null; final String zipFileName = WebServiceUtil.serverOutputFolderName; resp.setContentType("application/x-zip\r\n"); resp.setHeader("Content-Disposition", "attachment; filename=\"" + zipFileName + FileType.ZIP.getExtensionWithDot() + "\"\r\n"); try { out = resp.getOutputStream(); zout = new ZipOutputStream(out); FileUtils.zipDirectory(outputDir, zout, zipFileName); resp.setStatus(HttpServletResponse.SC_OK); } catch (final IOException e) { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error in creating output zip file.Please try again." + e.getMessage()); } finally { if (zout != null) { zout.close(); } if (out != null) { out.flush(); } FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); } } } } catch (final XmlMappingException xmle) { respStr = "Error in mapping input XML in the desired format. Please send it in the specified format. Detailed exception is " + xmle; } catch (final DCMAException dcmae) { respStr = "Error in processing request. Detailed exception is " + dcmae; } catch (final Exception e) { respStr = "Internal Server error.Please check logs for further details." + e; if (!workingDir.isEmpty()) { FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); } } } else { respStr = "Improper input to server. Expected multipart request. Returning without processing the results."; } if (!respStr.isEmpty()) { try { FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr); } catch (final IOException ioe) { } } }
From source file:com.ephesoft.dcma.workflow.service.webservices.EphesoftWebServiceAPI.java
@RequestMapping(value = "/splitMultipageFile", method = RequestMethod.POST) @ResponseBody// w w w. j a v a 2s .c om public void splitMultipageFile(final HttpServletRequest req, final HttpServletResponse resp) { String respStr = WebServiceUtil.EMPTY_STRING; String workingDir = WebServiceUtil.EMPTY_STRING; try { if (req instanceof DefaultMultipartHttpServletRequest) { logger.info("Start spliting multipage file"); final String webServiceFolderPath = bsService.getWebServicesFolderPath(); workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath); final String outputDir = WebServiceUtil.createWebServiceOutputDir(workingDir); InputStream instream = null; OutputStream outStream = null; final DefaultMultipartHttpServletRequest multiPartRequest = (DefaultMultipartHttpServletRequest) req; final BatchInstanceThread threadList = new BatchInstanceThread( new File(workingDir).getName() + Math.random()); String inputParams = WebServiceUtil.EMPTY_STRING, outputParams = WebServiceUtil.EMPTY_STRING; boolean isGSTool = false; for (final Enumeration<String> params = multiPartRequest.getParameterNames(); params .hasMoreElements();) { final String paramName = params.nextElement(); if (paramName.equalsIgnoreCase("isGhostscript")) { isGSTool = Boolean.parseBoolean(multiPartRequest.getParameter(paramName)); logger.info("Value for isGhostscript parameter is " + isGSTool); continue; } if (paramName.equalsIgnoreCase("inputParams")) { inputParams = multiPartRequest.getParameter(paramName); logger.info("Value for inputParams parameter is " + inputParams); continue; } if (paramName.equalsIgnoreCase("outputParams")) { outputParams = multiPartRequest.getParameter(paramName); logger.info("Value for outputParams parameter is " + outputParams); continue; } } final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap(); // perform validation on input fields String results = WebServiceUtil.validateSplitAPI(fileMap, isGSTool, outputParams, inputParams); if (!results.isEmpty()) { respStr = results; } else { for (final String fileName : fileMap.keySet()) { if (fileName.toLowerCase().indexOf(FileType.PDF.getExtension()) > -1 || fileName.toLowerCase().indexOf(FileType.TIF.getExtension()) > -1 || fileName.toLowerCase().indexOf(FileType.TIFF.getExtension()) > -1) { // only tiffs and RSP file is expected if (isGSTool && (fileName.toLowerCase().indexOf(FileType.TIF.getExtension()) > -1 || fileName.toLowerCase().indexOf(FileType.TIFF.getExtension()) > -1)) { respStr = "Only PDF files expected with GhostScript tool."; break; } final MultipartFile multipartFile = multiPartRequest.getFile(fileName); instream = multipartFile.getInputStream(); final File file = new File(workingDir + File.separator + fileName); outStream = new FileOutputStream(file); final byte[] buf = new byte[WebServiceUtil.bufferSize]; int len; while ((len = instream.read(buf)) > 0) { outStream.write(buf, 0, len); } if (instream != null) { instream.close(); } if (outStream != null) { outStream.close(); } } else { respStr = "Files other than tiff, tif and pdf formats are provided."; break; } } if (respStr.isEmpty()) { for (final String fileName : fileMap.keySet()) { final File file = new File(workingDir + File.separator + fileName); if (isGSTool) { logger.info( "Start spliting multipage file using ghost script for file :" + fileName); imService.convertPdfToSinglePageTiffsUsingGSAPI(inputParams, file, outputParams, new File(outputDir + File.separator + fileName), threadList); } else { logger.info( "Start spliting multipage file using image magick for file :" + fileName); imService.convertPdfOrMultiPageTiffToTiffUsingIM(inputParams, file, outputParams, new File(outputDir + File.separator + fileName), threadList); } } try { logger.info("Executing batch instance thread using thread pool"); threadList.execute(); } catch (final DCMAApplicationException e) { threadList.remove(); FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); throw new Exception(e.getMessage(), e); } ServletOutputStream out = null; ZipOutputStream zout = null; final String zipFileName = WebServiceUtil.serverOutputFolderName; resp.setContentType("application/x-zip\r\n"); resp.setHeader("Content-Disposition", "attachment; filename=\"" + zipFileName + FileType.ZIP.getExtensionWithDot() + "\"\r\n"); try { out = resp.getOutputStream(); zout = new ZipOutputStream(out); FileUtils.zipDirectory(outputDir, zout, zipFileName); resp.setStatus(HttpServletResponse.SC_OK); } catch (final IOException e) { respStr = "Unable to process web service request.Please check you ghostscipt or imagemagick configuration."; } finally { if (zout != null) { zout.close(); } if (out != null) { out.flush(); } FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); } } } } else { respStr = "Improper input to server. Expected multipart request. Returning without processing the results."; } } catch (Exception e) { respStr = "Internal Server error.Please check logs for further details." + e; } if (!workingDir.isEmpty()) { FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); } if (!respStr.isEmpty()) { try { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr); } catch (final IOException ioe) { } } }
From source file:com.ephesoft.dcma.workflow.service.webservices.EphesoftWebServiceAPI.java
@RequestMapping(value = "/extractKV", method = RequestMethod.POST) @ResponseBody/*from ww w. j a v a 2 s.c o m*/ public void extractKV(final HttpServletRequest req, final HttpServletResponse resp) { String respStr = WebServiceUtil.EMPTY_STRING; logger.info("Processing key value extraction using web service."); String workingDir = WebServiceUtil.EMPTY_STRING; if (req instanceof DefaultMultipartHttpServletRequest) { InputStream instream = null; OutputStream outStream = null; final String webServiceFolderPath = bsService.getWebServicesFolderPath(); final DefaultMultipartHttpServletRequest multiPartRequest = (DefaultMultipartHttpServletRequest) req; final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap(); if (fileMap.size() == 2) { try { workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath); ExtractKVParams params = null; String filePath = WebServiceUtil.EMPTY_STRING; for (final String fileName : fileMap.keySet()) { final MultipartFile multipartFile = multiPartRequest.getFile(fileName); instream = multipartFile.getInputStream(); if (fileName.toLowerCase().indexOf(FileType.XML.getExtension().toLowerCase()) > -1) { final Source source = XMLUtil.createSourceFromStream(instream); params = (ExtractKVParams) batchSchemaDao.getJAXB2Template().getJaxb2Marshaller() .unmarshal(source); continue; } else if (fileName.toLowerCase() .indexOf(FileType.HTML.getExtension().toLowerCase()) > -1) { filePath = workingDir + File.separator + fileName; logger.info("HTML file for processing is " + filePath); final File file = new File(filePath); outStream = new FileOutputStream(file); final byte[] buf = new byte[WebServiceUtil.bufferSize]; int len; while ((len = instream.read(buf)) > 0) { outStream.write(buf, 0, len); } continue; } } if (params != null && params.getParams().size() > 0 && !filePath.isEmpty()) { Params paramList = params.getParams().get(0); if (paramList.getLocationType() == null || paramList.getLocationType().isEmpty()) { respStr = "Please provide the location type. Accepted values are: TOP, RIGHT, LEFT, BOTTOM, TOP_RIGHT, TOP_LEFT, BOTTOM_LEFT, BOTTOM_RIGHT."; } if (respStr.isEmpty() && !LocationType.valuesAsStringList().contains(paramList.getLocationType())) { respStr = "Please provide the location type. Accepted values are: TOP, RIGHT, LEFT, BOTTOM, TOP_RIGHT, TOP_LEFT, BOTTOM_LEFT, BOTTOM_RIGHT."; } if (respStr.isEmpty() && (paramList.getKeyPattern() == null || paramList.getKeyPattern().isEmpty() || paramList.getValuePattern() == null || paramList.getValuePattern().isEmpty())) { respStr = "Please provide the key and value patterns."; } if (paramList.isAdvancedKV()) { if (respStr.isEmpty() && (paramList.getMultiplier() > 1 || paramList.getMultiplier() <= 0)) { respStr = "Please provide the multiplier for Advanced KV extraction. Range of values is between 0 to 1."; } if (respStr.isEmpty() && (paramList.getKVFetchValue() == null || paramList.getKVFetchValue().isEmpty())) { respStr = "Please provide the KVFetchValue for Advanced KV extraction. Expected values are:ALL, FIRST, LAST"; } if (respStr.isEmpty() && !(KVFetchValue.valuesAsStringList().contains(paramList.getKVFetchValue()))) { respStr = "Please provide the KVFetchValue for Advanced KV extraction. Expected values are:ALL, FIRST, LAST"; } if (respStr.isEmpty() && paramList.getLength() <= 0) { respStr = "Please provide the length value greater than zero with advanced KV extraction."; } if (respStr.isEmpty() && paramList.getWidth() <= 0) { respStr = "Please provide the width value greater than zero with advanced KV extraction."; } } else { if (respStr.isEmpty() && paramList.getNoOfWords() < 0) { respStr = "Please provide positive value for no of words with advanced KV extraction."; } } } else { respStr = "Please send an hocr file as input. Improper input to the server.Proceeding without processing"; } if (respStr.isEmpty()) { // extract the hocr content from hocr files // generate hocr from html file HocrPages hocrPages = new HocrPages(); List<HocrPage> hocrPageList = hocrPages.getHocrPage(); HocrPage hocrPage = new HocrPage(); String pageID = "PG0"; hocrPage.setPageID(pageID); hocrPageList.add(hocrPage); bsService.hocrGenerationAPI(workingDir, "PG0", filePath, hocrPage); final List<DocField> updtDocList = new ArrayList<DocField>(); final boolean isSuccess = kvService.extractKVDocumentFieldsFromHOCR(updtDocList, hocrPages, params); if (!isSuccess) { respStr = "Internal Server error.Please check logs for further details."; } else { logger.info("Generating document level fields for the output result"); final DocumentLevelFields dlfs = new DocumentLevelFields(); dlfs.getDocumentLevelField().addAll(updtDocList); Documents docs = new Documents(); Document doc = new Document(); docs.getDocument().add(doc); doc.setDocumentLevelFields(dlfs); StreamResult result; try { result = new StreamResult(resp.getOutputStream()); resp.setStatus(HttpServletResponse.SC_OK); batchSchemaDao.getJAXB2Template().getJaxb2Marshaller().marshal(docs, result); } catch (final IOException e) { respStr = "Internal Server error.Please check logs for further details." + e.getMessage(); } } } } catch (final XmlMappingException xmle) { respStr = "Error in mapping input XML or the hocr file in the desired format. Please send it in the specified format. Detailed exception is " + xmle; } catch (final DCMAException dcmae) { respStr = "Error in processing request. Detailed exception is " + dcmae; } catch (final Exception e) { respStr = "Internal Server error.Please check logs for further details." + e; } finally { IOUtils.closeQuietly(instream); IOUtils.closeQuietly(outStream); FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); } } else { respStr = "Improper input to server. Expected two files: hocr and xml parameter file. Returning without processing the results."; } } else { respStr = "Improper input to server. Expected multipart request. Returning without processing the results."; } if (!workingDir.isEmpty()) { FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); } if (!respStr.isEmpty()) { try { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr); } catch (final IOException ioe) { } } }
From source file:com.ephesoft.dcma.workflow.service.webservices.EphesoftWebServiceAPI.java
@RequestMapping(value = "/classifyBarcodeImage", method = RequestMethod.POST) @ResponseBody/*from w w w .j a v a 2 s. co m*/ public void classifyBarcodeImage(final HttpServletRequest req, final HttpServletResponse resp) { logger.info("Start processing web service for classifyBarcode."); String respStr = WebServiceUtil.EMPTY_STRING; String workingDir = WebServiceUtil.EMPTY_STRING; if (req instanceof DefaultMultipartHttpServletRequest) { try { final String webServiceFolderPath = bsService.getWebServicesFolderPath(); workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath); InputStream instream = null; OutputStream outStream = null; final DefaultMultipartHttpServletRequest multipartReq = (DefaultMultipartHttpServletRequest) req; String batchClassId = WebServiceUtil.EMPTY_STRING; for (final Enumeration<String> params = multipartReq.getParameterNames(); params .hasMoreElements();) { final String paramName = params.nextElement(); if (paramName.equalsIgnoreCase("batchClassId")) { batchClassId = multipartReq.getParameter(paramName); break; } } Map<BarcodeProperties, String> batchClassConfigMap = new HashMap<BarcodeProperties, String>(); if (batchClassId == null || batchClassId.isEmpty()) { respStr = "Batch Class identifier not specified."; } else { BatchClass bc = bcService.getBatchClassByIdentifier(batchClassId); if (bc == null) { respStr = "Batch class with the specified identifier does not exist."; } else { BatchPlugin barcodeReader = batchClassPPService.getPluginProperties(batchClassId, ICommonConstants.BARCODE_READER_PLUGIN); BatchPlugin docAssemblyPlugin = batchClassPPService.getPluginProperties(batchClassId, DocumentAssemblerConstants.DOCUMENT_ASSEMBLER_PLUGIN); if (barcodeReader == null || docAssemblyPlugin == null) { respStr = "Either Barcode Reader plugin or document assembly plugin does not exist for the specified batch id."; } else if (docAssemblyPlugin.getPluginConfigurations( DocumentAssemblerProperties.DA_BARCODE_CONFIDENCE) == null) { respStr = "Incomplete properties of the Document assembler plugin for the specified batch id."; } else if (barcodeReader .getPluginConfigurations(BarcodeProperties.BARCODE_VALID_EXTNS) == null || barcodeReader .getPluginConfigurations(BarcodeProperties.BARCODE_READER_TYPES) == null || barcodeReader.getPluginConfigurations(BarcodeProperties.MAX_CONFIDENCE) == null || barcodeReader .getPluginConfigurations(BarcodeProperties.MIN_CONFIDENCE) == null) { respStr = "Incomplete properties of the Barcode reader plugin for the specified batch id."; } } } if (respStr.isEmpty()) { batchClassConfigMap.put(BarcodeProperties.BARCODE_VALID_EXTNS, batchClassPPService.getPropertyValue(batchClassId, ICommonConstants.BARCODE_READER_PLUGIN, BarcodeProperties.BARCODE_VALID_EXTNS)); batchClassConfigMap.put(BarcodeProperties.BARCODE_READER_TYPES, batchClassPPService.getPropertyValue(batchClassId, ICommonConstants.BARCODE_READER_PLUGIN, BarcodeProperties.BARCODE_READER_TYPES)); batchClassConfigMap.put(BarcodeProperties.MAX_CONFIDENCE, batchClassPPService.getPropertyValue(batchClassId, ICommonConstants.BARCODE_READER_PLUGIN, BarcodeProperties.MAX_CONFIDENCE)); batchClassConfigMap.put(BarcodeProperties.MIN_CONFIDENCE, batchClassPPService.getPropertyValue(batchClassId, ICommonConstants.BARCODE_READER_PLUGIN, BarcodeProperties.MIN_CONFIDENCE)); final MultiValueMap<String, MultipartFile> fileMap = multipartReq.getMultiFileMap(); if (fileMap.size() == 1) { String tiffFileName = WebServiceUtil.EMPTY_STRING; for (final String fileName : fileMap.keySet()) { // only single tiff/tif file is expected as input if ((fileName.toLowerCase().indexOf(FileType.TIF.getExtension()) > -1 || fileName.toLowerCase().indexOf(FileType.TIFF.getExtension()) > -1)) { final MultipartFile f = multipartReq.getFile(fileName); instream = f.getInputStream(); final File file = new File(workingDir + File.separator + fileName); outStream = new FileOutputStream(file); final byte buf[] = new byte[1024]; int len; while ((len = instream.read(buf)) > 0) { outStream.write(buf, 0, len); } if (instream != null) { instream.close(); } if (outStream != null) { outStream.close(); } if (TIFFUtil.getTIFFPageCount(file.getAbsolutePath()) > 1) { respStr = "Improper input to server. Expected only one single page tiff file. Returning without processing the results."; } tiffFileName = file.getName(); break; } else { respStr = "Improper input to server. Expected only one tiff file. Returning without processing the results."; } } if (respStr.isEmpty()) { ObjectFactory objectFactory = new ObjectFactory(); Pages pages = new Pages(); List<Page> listOfPages = pages.getPage(); List<Document> xmlDocuments = new ArrayList<Document>(); Document doc = objectFactory.createDocument(); xmlDocuments.add(doc); doc.setPages(pages); Page pageType = objectFactory.createPage(); pageType.setIdentifier(EphesoftProperty.PAGE.getProperty() + "0"); pageType.setNewFileName(tiffFileName); listOfPages.add(pageType); String batchInstanceIdentifier = new File(workingDir).getName() + Math.random(); barcodeService.extractPageBarCodeAPI(xmlDocuments, batchInstanceIdentifier, workingDir, batchClassConfigMap); try { // invoke the document assembler plugin xmlDocuments = docAssembler.createDocumentAPI(DocumentClassificationFactory.BARCODE, batchClassId, listOfPages); Documents docs = new Documents(); docs.getDocument().addAll(xmlDocuments); StreamResult result; try { result = new StreamResult(resp.getOutputStream()); resp.setStatus(HttpServletResponse.SC_OK); batchSchemaDao.getJAXB2Template().getJaxb2Marshaller().marshal(docs, result); } catch (final IOException e) { respStr = "Internal Server error.Please check logs for further details." + e; } } catch (final DCMAApplicationException e) { respStr = "Error while executing plugin. Detailed exception is " + e; } } } else { respStr = "Improper input to server. Expected only one html file. Returning without processing the results."; } } } catch (final XmlMappingException xmle) { respStr = "Error in mapping input XML in the desired format. Please send it in the specified format. Detailed exception is " + xmle; } catch (final DCMAException dcmae) { respStr = "Error in processing request. Detailed exception is " + dcmae; } catch (final Exception e) { respStr = "Internal Server error.Please check logs for further details." + e; if (!workingDir.isEmpty()) { FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); } } } else { respStr = "Improper input to server. Expected multipart request. Returing without processing the results."; } if (!workingDir.isEmpty()) { FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile()); } if (!respStr.isEmpty()) { try { resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr); } catch (final IOException ioe) { } } }