List of usage examples for org.apache.commons.fileupload FileItemStream getFieldName
String getFieldName();
From source file:org.olat.core.gui.components.form.flexible.impl.Form.java
/** * Internal helper to initialize the request parameter map an to temporary store the uploaded files when a multipart request is used. The files are stored to a * temporary location and a filehandle is added to the requestMultipartFiles map for later retrieval by the responsible FormItem. * /*ww w . j a v a 2 s.c om*/ * @param ureq */ private void doInitRequestParameterAndMulipartData(UserRequest ureq) { // First fill parameter map either from multipart data or standard http request if (isMultipartEnabled() && ServletFileUpload.isMultipartContent(ureq.getHttpReq())) { long uploadSize = -1; // default unlimited // Limit size of complete upload form: upload size limit + 500k for // other input fields if (multipartUploadMaxSizeKB > -1) { uploadSize = (multipartUploadMaxSizeKB * 1024l * 1024l) + 512000l; } // Create a new file upload handler, use commons fileupload streaming // API to save files right to the tmp location ServletFileUpload uploadParser = new ServletFileUpload(); uploadParser.setSizeMax(uploadSize); // Parse the request try { FileItemIterator iter = uploadParser.getItemIterator(ureq.getHttpReq()); while (iter.hasNext()) { FileItemStream item = iter.next(); String itemName = item.getFieldName(); InputStream itemStream = item.openStream(); if (item.isFormField()) { // Normal form item // analog to ureq.getParameter in non-multipart mode String value = Streams.asString(itemStream, "UTF-8"); addRequestParameter(itemName, value); } else { // File item, store it to temp location String fileName = item.getName(); // Cleanup IE filenames that are absolute int slashpos = fileName.lastIndexOf("/"); if (slashpos != -1) fileName = fileName.substring(slashpos + 1); slashpos = fileName.lastIndexOf("\\"); if (slashpos != -1) fileName = fileName.substring(slashpos + 1); File tmpFile = new File(System.getProperty("java.io.tmpdir") + File.separator + "upload-" + CodeHelper.getGlobalForeverUniqueID()); try { FileUtils.save(itemStream, tmpFile); // Only save non-empty file transfers, ignore empty transfers // (e.g. already submitted in a previous form submit, not an error!) // Removing empty file check for now ... was introduced to cope with // browser trouble which probably is not there any more ... // so empty fileName means nothing selected in the file element // if (tmpFile.length() > 0) { if (fileName.length() > 0) { // a file was selected // Save file and also original file name requestMultipartFiles.put(itemName, tmpFile); requestMultipartFileNames.put(itemName, fileName); requestMultipartFileMimeTypes.put(itemName, item.getContentType()); } else { if (tmpFile.exists()) tmpFile.delete(); } } catch (OLATRuntimeException e) { // Could not save stream for whatever reason, cleanup temp file and delegate exception if (tmpFile.exists()) tmpFile.delete(); if (e.getCause() instanceof MalformedStreamException) { logWarn("Could not read uploaded file >" + fileName + "< from stream. Possibly an attempt to upload a directory instead of a file (happens on Mac)", e); return; } throw new OLATRuntimeException("Could not save uploaded file", e); } } } } catch (SizeLimitExceededException sizeLimitExceededException) { logError("Error while dispatching multipart form: file limit (" + uploadSize + ") exceeded", sizeLimitExceededException); requestError = REQUEST_ERROR_UPLOAD_LIMIT_EXCEEDED; } catch (IOException e) { logWarn("Error while dispatching multipart form: ioexception", e); requestError = REQUEST_ERROR_GENERAL; } catch (Exception e) { logError("Error while dispatching multipart form: general exception", e); requestError = REQUEST_ERROR_GENERAL; } } else { // Get parameters the standard way logDebug("Dispatching non-multipart form", null); Set<String> keys = ureq.getParameterSet(); for (String key : keys) { String[] values = ureq.getHttpReq().getParameterValues(key); if (values != null) { requestParams.put(key, values); } else { addRequestParameter(key, ureq.getParameter(key)); } } } }
From source file:org.olat.restapi.support.MultipartReader.java
private final void apache(HttpServletRequest request, long uploadLimit) { ServletFileUpload uploadParser = new ServletFileUpload(); uploadParser.setSizeMax((uploadLimit * 1024l) + 512000l); // Parse the request try {/* w w w. java 2s . c om*/ FileItemIterator iter = uploadParser.getItemIterator(request); while (iter.hasNext()) { FileItemStream item = iter.next(); String itemName = item.getFieldName(); InputStream itemStream = item.openStream(); if (item.isFormField()) { String value = Streams.asString(itemStream, "UTF-8"); fields.put(itemName, value); } else { // File item, store it to temp location filename = item.getName(); contentType = item.getContentType(); if (filename != null) { filename = UUID.randomUUID().toString().replace("-", "") + "_" + filename; } else { filename = "upload-" + UUID.randomUUID().toString().replace("-", ""); } file = new File(WebappHelper.getTmpDir(), filename); try { save(itemStream, file); } catch (Exception e) { log.error("", e); } } } } catch (Exception e) { log.error("", e); } }
From source file:org.onecmdb.ui.gwt.desktop.server.command.ChangeUploadCommand.java
private void getFileItem(HttpServletRequest request) throws FileUploadException, IOException { boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (!isMultipart) { throw new IllegalArgumentException("Not multipart..."); }/*w ww. j a v a2s . c o m*/ ServletFileUpload upload = new ServletFileUpload(); List<String> mdrEntries = new ArrayList<String>(); // Parse the request FileItemIterator iter = upload.getItemIterator(request); while (iter.hasNext()) { FileItemStream item = iter.next(); String name = item.getFieldName(); InputStream stream = item.openStream(); if (item.isFormField()) { System.out.println("Form field " + name + " with value " + Streams.asString(stream) + " detected."); } else { System.out.println("File field " + name + " with file name " + item.getName() + " detected."); // Process the input stream } String mdrEntry = handleInput(name, stream); mdrEntries.add(mdrEntry); } commitContent(mdrEntries); }
From source file:org.onecmdb.ui.gwt.desktop.server.servlet.ContentServiceServlet.java
private void getFileItem(HttpServletRequest request, File root) throws FileUploadException, IOException { boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (!isMultipart) { throw new IllegalArgumentException("Not multipart..."); }//from w w w . ja v a2 s. c o m ServletFileUpload upload = new ServletFileUpload(); // Parse the request FileItemIterator iter = upload.getItemIterator(request); String fileName = null; String path = null; while (iter.hasNext()) { FileItemStream item = iter.next(); String name = item.getFieldName(); InputStream stream = item.openStream(); System.out.println("Name=" + item.getName()); if (item.isFormField()) { String value = Streams.asString(stream); System.out.println("FormField " + name + "=" + value); if (name.equals("name")) { fileName = value; } if (name.equals("path")) { path = value; } } else { System.out.println("File field " + name + " with file name " + item.getName() + " detected."); File output = new File(root, path + "/" + fileName); System.out.println("Write upload to " + output.getPath()); IOUtil.copyCompletely(stream, new FileOutputStream(output)); } } }
From source file:org.opencastproject.fileupload.rest.FileUploadRestService.java
@POST @Produces(MediaType.APPLICATION_XML)/* www . ja v a 2 s .com*/ @Path("job/{jobID}") @RestQuery(name = "newjob", description = "Appends the next chunk of data to the file on the server.", pathParameters = { @RestParameter(description = "The ID of the upload job", isRequired = false, name = "jobID", type = RestParameter.Type.STRING) }, restParameters = { @RestParameter(description = "The number of the current chunk", isRequired = false, name = "chunknumber", type = RestParameter.Type.STRING), @RestParameter(description = "The payload", isRequired = false, name = "filedata", type = RestParameter.Type.FILE) }, reponses = { @RestResponse(description = "the chunk data was successfully appended to file on server", responseCode = HttpServletResponse.SC_OK), @RestResponse(description = "the upload job was not found", responseCode = HttpServletResponse.SC_NOT_FOUND), @RestResponse(description = "the request was malformed", responseCode = HttpServletResponse.SC_BAD_REQUEST) }, returnDescription = "The XML representation of the updated upload job") public Response postPayload(@PathParam("jobID") String jobId, @Context HttpServletRequest request) { try { if (!ServletFileUpload.isMultipartContent(request)) { // make sure request is "multipart/form-data" throw new FileUploadException("Request is not of type multipart/form-data"); } if (uploadService.hasJob(jobId)) { // testing for existence of job here already so we can generate a 404 early long chunkNum = 0; FileUploadJob job = uploadService.getJob(jobId); ServletFileUpload upload = new ServletFileUpload(); for (FileItemIterator iter = upload.getItemIterator(request); iter.hasNext();) { FileItemStream item = iter.next(); if (item.isFormField()) { String name = item.getFieldName(); if (REQUESTFIELD_CHUNKNUM.equalsIgnoreCase(name)) { chunkNum = Long.parseLong(Streams.asString(item.openStream())); } } else if (REQUESTFIELD_DATA.equalsIgnoreCase(item.getFieldName())) { uploadService.acceptChunk(job, chunkNum, item.openStream()); return Response.ok(job).build(); } } throw new FileUploadException("No payload!"); } else { log.warn("Upload job not found: " + jobId); return Response.status(Response.Status.NOT_FOUND).build(); } } catch (FileUploadException e) { log.error(e.getMessage(), e); return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build(); } catch (Exception e) { log.error(e.getMessage(), e); return Response.serverError().entity(buildUnexpectedErrorMessage(e)).build(); } }
From source file:org.opencastproject.index.service.impl.IndexServiceImpl.java
@Override public String createEvent(HttpServletRequest request) throws InternalServerErrorException, IllegalArgumentException { JSONObject metadataJson = null;/*from w w w.j a v a2 s . c o m*/ MediaPackage mp = null; try { if (ServletFileUpload.isMultipartContent(request)) { mp = getIngestService().createMediaPackage(); for (FileItemIterator iter = new ServletFileUpload().getItemIterator(request); iter.hasNext();) { FileItemStream item = iter.next(); String fieldName = item.getFieldName(); if (item.isFormField()) { if ("metadata".equals(fieldName)) { String metadata = Streams.asString(item.openStream()); try { metadataJson = (JSONObject) parser.parse(metadata); } catch (Exception e) { logger.warn("Unable to parse metadata {}", metadata); throw new IllegalArgumentException("Unable to parse metadata"); } } } else { if ("presenter".equals(item.getFieldName())) { mp = getIngestService().addTrack(item.openStream(), item.getName(), MediaPackageElements.PRESENTER_SOURCE, mp); } else if ("presentation".equals(item.getFieldName())) { mp = getIngestService().addTrack(item.openStream(), item.getName(), MediaPackageElements.PRESENTATION_SOURCE, mp); } else if ("audio".equals(item.getFieldName())) { mp = getIngestService().addTrack(item.openStream(), item.getName(), new MediaPackageElementFlavor("presenter-audio", "source"), mp); } else { logger.warn("Unknown field name found {}", item.getFieldName()); } } } } else { throw new IllegalArgumentException("No multipart content"); } // MH-10834 If there is only an audio track, change the flavor from presenter-audio/source to presenter/source. if (mp.getTracks().length == 1 && mp.getTracks()[0].getFlavor() .equals(new MediaPackageElementFlavor("presenter-audio", "source"))) { Track audioTrack = mp.getTracks()[0]; mp.remove(audioTrack); audioTrack.setFlavor(MediaPackageElements.PRESENTER_SOURCE); mp.add(audioTrack); } return createEvent(metadataJson, mp); } catch (Exception e) { logger.error("Unable to create event: {}", ExceptionUtils.getStackTrace(e)); throw new InternalServerErrorException(e.getMessage()); } }
From source file:org.opencastproject.ingest.endpoint.IngestRestService.java
protected Response addMediaPackageElement(HttpServletRequest request, MediaPackageElement.Type type) { MediaPackageElementFlavor flavor = null; try {/* w w w . j av a 2s .c om*/ InputStream in = null; String fileName = null; MediaPackage mp = null; if (ServletFileUpload.isMultipartContent(request)) { boolean isDone = false; for (FileItemIterator iter = new ServletFileUpload().getItemIterator(request); iter.hasNext();) { FileItemStream item = iter.next(); String fieldName = item.getFieldName(); if (item.isFormField()) { if ("flavor".equals(fieldName)) { String flavorString = Streams.asString(item.openStream()); if (flavorString != null) { flavor = MediaPackageElementFlavor.parseFlavor(flavorString); } } else if ("mediaPackage".equals(fieldName)) { mp = factory.newMediaPackageBuilder().loadFromXml(item.openStream()); } } else { // once the body gets read iter.hasNext must not be invoked or the stream can not be read // MH-9579 fileName = item.getName(); in = item.openStream(); isDone = true; } if (isDone) { break; } } if (MediaPackageSupport.sanityCheck(mp).isSome()) return Response.serverError().status(Status.BAD_REQUEST).build(); switch (type) { case Attachment: mp = ingestService.addAttachment(in, fileName, flavor, mp); break; case Catalog: mp = ingestService.addCatalog(in, fileName, flavor, mp); break; case Track: mp = ingestService.addTrack(in, fileName, flavor, mp); break; default: throw new IllegalStateException("Type must be one of track, catalog, or attachment"); } // ingestService.ingest(mp); return Response.ok(MediaPackageParser.getAsXml(mp)).build(); } return Response.serverError().status(Status.BAD_REQUEST).build(); } catch (Exception e) { logger.warn(e.getMessage(), e); return Response.serverError().status(Status.INTERNAL_SERVER_ERROR).build(); } }
From source file:org.opencastproject.ingest.endpoint.IngestRestService.java
@POST @Produces(MediaType.TEXT_XML)// ww w .ja va 2 s . com @Consumes(MediaType.MULTIPART_FORM_DATA) @Path("addMediaPackage/{wdID}") @RestQuery(name = "addMediaPackage", description = "Create and ingest media package from media tracks with additional Dublin Core metadata. Notice: It is mandatory to set a title for the recording. This can be done with the 'title' form field or by supplying a DC catalog with a title included.", pathParameters = { @RestParameter(description = "Workflow definition id", isRequired = true, name = "wdID", type = RestParameter.Type.STRING) }, restParameters = { @RestParameter(description = "The kind of media track. This has to be specified in the request prior to each media track", isRequired = true, name = "flavor", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "abstract", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "accessRights", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "available", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "contributor", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "coverage", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "created", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "creator", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "date", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "description", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "extent", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "format", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "identifier", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "isPartOf", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "isReferencedBy", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "isReplacedBy", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "language", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "license", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "publisher", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "relation", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "replaces", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "rights", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "rightsHolder", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "source", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "spatial", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "subject", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "temporal", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "title", type = RestParameter.Type.STRING), @RestParameter(description = "Episode metadata value", isRequired = false, name = "type", type = RestParameter.Type.STRING), @RestParameter(description = "URL of episode DublinCore Catalog", isRequired = false, name = "episodeDCCatalogUri", type = RestParameter.Type.STRING), @RestParameter(description = "Episode DublinCore Catalog", isRequired = false, name = "episodeDCCatalog", type = RestParameter.Type.STRING), @RestParameter(description = "URL of series DublinCore Catalog", isRequired = false, name = "seriesDCCatalogUri", type = RestParameter.Type.STRING), @RestParameter(description = "Series DublinCore Catalog", isRequired = false, name = "seriesDCCatalog", type = RestParameter.Type.STRING), @RestParameter(description = "URL of a media track file", isRequired = false, name = "mediaUri", type = RestParameter.Type.STRING) }, bodyParameter = @RestParameter(description = "The media track file", isRequired = true, name = "BODY", type = RestParameter.Type.FILE), reponses = { @RestResponse(description = "Returns augmented media package", responseCode = HttpServletResponse.SC_OK), @RestResponse(description = "", responseCode = HttpServletResponse.SC_BAD_REQUEST), @RestResponse(description = "", responseCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR) }, returnDescription = "") public Response addMediaPackage(@Context HttpServletRequest request, @PathParam("wdID") String wdID) { MediaPackageElementFlavor flavor = null; try { MediaPackage mp = ingestService.createMediaPackage(); DublinCoreCatalog dcc = null; Map<String, String> workflowProperties = new HashMap<String, String>(); int seriesDCCatalogNumber = 0; int episodeDCCatalogNumber = 0; boolean hasMedia = false; if (ServletFileUpload.isMultipartContent(request)) { for (FileItemIterator iter = new ServletFileUpload().getItemIterator(request); iter.hasNext();) { FileItemStream item = iter.next(); if (item.isFormField()) { String fieldName = item.getFieldName(); String value = Streams.asString(item.openStream()); /* Ignore empty fields */ if ("".equals(value)) { continue; } /* Remember? the flavor for the next media. */ if ("flavor".equals(fieldName)) { flavor = MediaPackageElementFlavor.parseFlavor(value); /* Fields for DC catalog */ } else if (dcterms.contains(fieldName)) { if ("identifier".equals(fieldName)) { /* Use the identifier for the mediapackage */ mp.setIdentifier(new IdImpl(value)); } EName en = new EName(DublinCore.TERMS_NS_URI, fieldName); if (dcc == null) { dcc = dublinCoreService.newInstance(); } dcc.add(en, value); /* Episode metadata by URL */ } else if ("episodeDCCatalogUri".equals(fieldName)) { try { URI dcurl = new URI(value); ingestService.addCatalog(dcurl, MediaPackageElements.EPISODE, mp); episodeDCCatalogNumber += 1; } catch (java.net.URISyntaxException e) { /* Parameter was not a valid URL: Return 400 Bad Request */ logger.warn(e.getMessage(), e); return Response.serverError().status(Status.BAD_REQUEST).build(); } /* Episode metadata DC catalog (XML) as string */ } else if ("episodeDCCatalog".equals(fieldName)) { String fileName = "episode" + episodeDCCatalogNumber + ".xml"; episodeDCCatalogNumber += 1; InputStream is = new ByteArrayInputStream(value.getBytes("UTF-8")); ingestService.addCatalog(is, fileName, MediaPackageElements.EPISODE, mp); /* Series by URL */ } else if ("seriesDCCatalogUri".equals(fieldName)) { try { URI dcurl = new URI(value); ingestService.addCatalog(dcurl, MediaPackageElements.SERIES, mp); } catch (java.net.URISyntaxException e) { /* Parameter was not a valid URL: Return 400 Bad Request */ logger.warn(e.getMessage(), e); return Response.serverError().status(Status.BAD_REQUEST).build(); } /* Series DC catalog (XML) as string */ } else if ("seriesDCCatalog".equals(fieldName)) { String fileName = "series" + seriesDCCatalogNumber + ".xml"; seriesDCCatalogNumber += 1; InputStream is = new ByteArrayInputStream(value.getBytes("UTF-8")); ingestService.addCatalog(is, fileName, MediaPackageElements.SERIES, mp); /* Add media files by URL */ } else if ("mediaUri".equals(fieldName)) { if (flavor == null) { /* A flavor has to be specified in the request prior the media file */ return Response.serverError().status(Status.BAD_REQUEST).build(); } URI mediaUrl; try { mediaUrl = new URI(value); } catch (java.net.URISyntaxException e) { /* Parameter was not a valid URL: Return 400 Bad Request */ logger.warn(e.getMessage(), e); return Response.serverError().status(Status.BAD_REQUEST).build(); } ingestService.addTrack(mediaUrl, flavor, mp); hasMedia = true; } else { /* Tread everything else as workflow properties */ workflowProperties.put(fieldName, value); } /* Media files as request parameter */ } else { if (flavor == null) { /* A flavor has to be specified in the request prior the video file */ return Response.serverError().status(Status.BAD_REQUEST).build(); } ingestService.addTrack(item.openStream(), item.getName(), flavor, mp); hasMedia = true; } } /* Check if we got any media. Fail if not. */ if (!hasMedia) { logger.warn("Rejected ingest without actual media."); return Response.serverError().status(Status.BAD_REQUEST).build(); } Catalog[] dccs = mp.getCatalogs(MediaPackageElements.EPISODE); for (int i = 0; i < dccs.length; i++) { EName en = new EName(DublinCore.TERMS_NS_URI, "identifier"); String id = ((DublinCoreCatalog) dccs[i]).getFirst(en); if (id != null) { mp.setIdentifier(new IdImpl(id)); } } /* Add episode mediapackage if metadata were send separately */ if (dcc != null) { ByteArrayOutputStream out = new ByteArrayOutputStream(); dcc.toXml(out, true); InputStream in = new ByteArrayInputStream(out.toByteArray()); ingestService.addCatalog(in, "dublincore.xml", MediaPackageElements.EPISODE, mp); /* Check if we have metadata for the episode */ } else if (episodeDCCatalogNumber == 0) { logger.warn("Rejected ingest without episode metadata. At least provide a title."); return Response.serverError().status(Status.BAD_REQUEST).build(); } WorkflowInstance workflow = (wdID == null) ? ingestService.ingest(mp) : ingestService.ingest(mp, wdID, workflowProperties); return Response.ok(workflow).build(); } return Response.serverError().status(Status.BAD_REQUEST).build(); } catch (Exception e) { logger.warn(e.getMessage(), e); return Response.serverError().status(Status.INTERNAL_SERVER_ERROR).build(); } }
From source file:org.opencastproject.ingest.endpoint.IngestRestService.java
private Response ingestZippedMediaPackage(HttpServletRequest request, String wdID, String wiID) { if (isIngestLimitEnabled()) { setIngestLimit(getIngestLimit() - 1); logger.debug("An ingest has started so remaining ingest limit is " + getIngestLimit()); }/*from ww w . j av a 2 s .co m*/ InputStream in = null; logger.info("Received new request from {} to ingest a zipped mediapackage", request.getRemoteHost()); try { String workflowDefinitionId = wdID; String workflowIdAsString = wiID; Long workflowInstanceIdAsLong = null; Map<String, String> workflowConfig = new HashMap<String, String>(); if (ServletFileUpload.isMultipartContent(request)) { boolean isDone = false; for (FileItemIterator iter = new ServletFileUpload().getItemIterator(request); iter.hasNext();) { FileItemStream item = iter.next(); if (item.isFormField()) { if (WORKFLOW_INSTANCE_ID_PARAM.equals(item.getFieldName())) { workflowIdAsString = IOUtils.toString(item.openStream(), "UTF-8"); continue; } else if (WORKFLOW_DEFINITION_ID_PARAM.equals(item.getFieldName())) { workflowDefinitionId = IOUtils.toString(item.openStream(), "UTF-8"); continue; } else { logger.debug("Processing form field: " + item.getFieldName()); workflowConfig.put(item.getFieldName(), IOUtils.toString(item.openStream(), "UTF-8")); } } else { logger.debug("Processing file item"); // once the body gets read iter.hasNext must not be invoked or the stream can not be read // MH-9579 in = item.openStream(); isDone = true; } if (isDone) break; } } else { logger.debug("Processing file item"); in = request.getInputStream(); } /* Try to convert the workflowId to integer */ if (!StringUtils.isBlank(workflowIdAsString)) { try { workflowInstanceIdAsLong = Long.parseLong(workflowIdAsString); } catch (NumberFormatException e) { logger.warn("{} '{}' is not numeric", WORKFLOW_INSTANCE_ID_PARAM, workflowIdAsString); } } if (StringUtils.isBlank(workflowDefinitionId)) { workflowDefinitionId = defaultWorkflowDefinitionId; } WorkflowInstance workflow = ingestService.addZippedMediaPackage(in, workflowDefinitionId, workflowConfig, workflowInstanceIdAsLong); return Response.ok(WorkflowParser.toXml(workflow)).build(); } catch (MediaPackageException e) { logger.warn(e.getMessage()); return Response.serverError().status(Status.BAD_REQUEST).build(); } catch (Exception e) { logger.warn(e.getMessage(), e); return Response.serverError().status(Status.INTERNAL_SERVER_ERROR).build(); } finally { IOUtils.closeQuietly(in); if (isIngestLimitEnabled()) { setIngestLimit(getIngestLimit() + 1); logger.debug("An ingest has finished so increased ingest limit to " + getIngestLimit()); } } }
From source file:org.opencastproject.ingest.endpoint.IngestRestService.java
/** * Add an elements to a MediaPackage and keeps track of the progress of the upload. Returns an HTML that triggers the * host sites UploadListener.uploadComplete javascript event Returns an HTML that triggers the host sites * UploadListener.uplaodFailed javascript event in case of error * //from w ww . ja v a 2 s . c om * @param jobId * of the upload job * @param request * containing the file, the flavor and the MediaPackage to which it should be added * @return HTML that calls the UploadListener.uploadComplete javascript handler */ @POST @Path("addElementMonitored/{jobId}") @Produces(MediaType.TEXT_HTML) public Response addElementMonitored(@PathParam("jobId") String jobId, @Context HttpServletRequest request) { UploadJob job = null; MediaPackage mp = null; String fileName = null; MediaPackageElementFlavor flavor = null; String elementType = "track"; EntityManager em = null; try { em = emf.createEntityManager(); try { // try to get UploadJob, responde 404 if not successful // job = em.find(UploadJob.class, jobId); if (jobs.containsKey(jobId)) { job = jobs.get(jobId); } else { throw new NoResultException("Job not found"); } } catch (NoResultException e) { logger.warn("Upload job not found for Id: " + jobId); return buildUploadFailedRepsonse(job); } if (ServletFileUpload.isMultipartContent(request)) { ServletFileUpload upload = new ServletFileUpload(); UploadProgressListener listener = new UploadProgressListener(job, this.emf); upload.setProgressListener(listener); for (FileItemIterator iter = upload.getItemIterator(request); iter.hasNext();) { FileItemStream item = iter.next(); String fieldName = item.getFieldName(); if ("mediaPackage".equalsIgnoreCase(fieldName)) { mp = factory.newMediaPackageBuilder().loadFromXml(item.openStream()); } else if ("flavor".equals(fieldName)) { String flavorString = Streams.asString(item.openStream()); if (flavorString != null) { flavor = MediaPackageElementFlavor.parseFlavor(flavorString); } } else if ("elementType".equalsIgnoreCase(fieldName)) { String typeString = Streams.asString(item.openStream()); if (typeString != null) { elementType = typeString; } } else if ("file".equalsIgnoreCase(fieldName)) { fileName = item.getName(); job.setFilename(fileName); if ((mp != null) && (flavor != null) && (fileName != null)) { // decide which element type to add if ("TRACK".equalsIgnoreCase(elementType)) { mp = ingestService.addTrack(item.openStream(), fileName, flavor, mp); } else if ("CATALOG".equalsIgnoreCase(elementType)) { logger.info("Adding Catalog: " + fileName + " - " + flavor); mp = ingestService.addCatalog(item.openStream(), fileName, flavor, mp); } InputStream is = null; try { is = getClass().getResourceAsStream("/templates/complete.html"); String html = IOUtils.toString(is, "UTF-8"); html = html.replaceAll("\\{mediaPackage\\}", MediaPackageParser.getAsXml(mp)); html = html.replaceAll("\\{jobId\\}", job.getId()); return Response.ok(html).build(); } finally { IOUtils.closeQuietly(is); } } } } } else { logger.warn("Job " + job.getId() + ": message is not multipart/form-data encoded"); } return buildUploadFailedRepsonse(job); } catch (Exception ex) { logger.error(ex.getMessage()); return buildUploadFailedRepsonse(job); } finally { if (em != null) em.close(); } }