Search in sources :

Example 6 with UploadedFile

use of com.liferay.faces.util.model.UploadedFile in project liferay-faces-bridge-impl by liferay.

the class MultiPartFormDataProcessorImpl method process.

@Override
public Map<String, List<UploadedFile>> process(ClientDataRequest clientDataRequest, PortletConfig portletConfig, FacesRequestParameterMap facesRequestParameterMap) {
    PortletSession portletSession = clientDataRequest.getPortletSession();
    String uploadedFilesDir = PortletConfigParam.UploadedFilesDir.getStringValue(portletConfig);
    // Using the portlet sessionId, determine a unique folder path and create the path if it does not exist.
    String sessionId = portletSession.getId();
    // FACES-1452: Non-alpha-numeric characters must be removed order to ensure that the folder will be
    // created properly.
    sessionId = sessionId.replaceAll("[^A-Za-z0-9]", "");
    File uploadedFilesPath = new File(uploadedFilesDir, sessionId);
    if (!uploadedFilesPath.exists()) {
        if (!uploadedFilesPath.mkdirs()) {
            logger.warn("Unable to create directory for uploadedFilesPath=[{0}]", uploadedFilesPath);
        }
    }
    return iterateOver(clientDataRequest, portletConfig, facesRequestParameterMap, uploadedFilesPath);
}
Also used : PortletSession(javax.portlet.PortletSession) UploadedFile(com.liferay.faces.util.model.UploadedFile) File(java.io.File)

Example 7 with UploadedFile

use of com.liferay.faces.util.model.UploadedFile in project liferay-faces-bridge-impl by liferay.

the class ApplicantBacking method handleFileUpload.

public void handleFileUpload(FileUploadEvent fileUploadEvent) throws Exception {
    UploadedFile uploadedFile = fileUploadEvent.getUploadedFile();
    FacesContext facesContext = FacesContext.getCurrentInstance();
    File attachmentDir = attachmentManager.getAttachmentDir(facesContext);
    if (!attachmentDir.exists()) {
        attachmentDir.mkdir();
    }
    File copiedFile = new File(attachmentDir, uploadedFile.getName());
    try {
        uploadedFile.write(copiedFile.getAbsolutePath());
        uploadedFile.delete();
        logger.debug("Received fileName=[{0}] absolutePath=[{1}]", copiedFile.getName(), copiedFile.getAbsolutePath());
        List<Attachment> attachments = attachmentManager.getAttachments(attachmentDir);
        applicant.setAttachments(attachments);
    } catch (IOException e) {
        logger.error(e);
    }
}
Also used : FacesContext(javax.faces.context.FacesContext) UploadedFile(com.liferay.faces.util.model.UploadedFile) Attachment(com.liferay.faces.demos.applicant.alloy.facelets.dto.Attachment) IOException(java.io.IOException) UploadedFile(com.liferay.faces.util.model.UploadedFile) File(java.io.File)

Example 8 with UploadedFile

use of com.liferay.faces.util.model.UploadedFile in project liferay-faces-alloy by liferay.

the class InputFileBackingBean method handleFileUpload.

public void handleFileUpload(FileUploadEvent fileUploadEvent) {
    List<UploadedFile> uploadedFiles = inputFileModelBean.getUploadedFiles();
    UploadedFile uploadedFile = fileUploadEvent.getUploadedFile();
    if (uploadedFile.getStatus() == UploadedFile.Status.FILE_SAVED) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        FacesMessage facesMessage = new FacesMessage("Received fileUploadEvent for file named '" + uploadedFile.getName() + "' in the " + fileUploadEvent.getPhaseId().toString() + " phase.");
        facesContext.addMessage(null, facesMessage);
        uploadedFiles.add(uploadedFile);
        logger.debug("Received fileName=[{0}] absolutePath=[{1}]", uploadedFile.getName(), uploadedFile.getAbsolutePath());
    } else {
        logger.error("Failed to receive uploaded file due to error status=[{0}] message=[{1}]", uploadedFile.getStatus(), uploadedFile.getMessage());
    }
}
Also used : FacesContext(javax.faces.context.FacesContext) UploadedFile(com.liferay.faces.util.model.UploadedFile) FacesMessage(javax.faces.application.FacesMessage)

Example 9 with UploadedFile

use of com.liferay.faces.util.model.UploadedFile in project liferay-faces-alloy by liferay.

the class InputFileDecoderCommonsImpl method decode.

@Override
public Map<String, List<UploadedFile>> decode(FacesContext facesContext, String location) {
    Map<String, List<UploadedFile>> uploadedFileMap = null;
    ExternalContext externalContext = facesContext.getExternalContext();
    String uploadedFilesFolder = getUploadedFilesFolder(externalContext, location);
    // Using the sessionId, determine a unique folder path and create the path if it does not exist.
    String sessionId = getSessionId(externalContext);
    // FACES-1452: Non-alpha-numeric characters must be removed order to ensure that the folder will be
    // created properly.
    sessionId = sessionId.replaceAll("[^A-Za-z0-9]", " ");
    File uploadedFilesPath = new File(uploadedFilesFolder, sessionId);
    if (!uploadedFilesPath.exists()) {
        uploadedFilesPath.mkdirs();
    }
    // Initialize commons-fileupload with the file upload path.
    DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
    diskFileItemFactory.setRepository(uploadedFilesPath);
    // Initialize commons-fileupload so that uploaded temporary files are not automatically deleted.
    diskFileItemFactory.setFileCleaningTracker(null);
    // Initialize the commons-fileupload size threshold to zero, so that all files will be dumped to disk
    // instead of staying in memory.
    diskFileItemFactory.setSizeThreshold(0);
    // Determine the max file upload size threshold (in bytes).
    int uploadedFileMaxSize = WebConfigParam.UploadedFileMaxSize.getIntegerValue(externalContext);
    // Parse the request parameters and save all uploaded files in a map.
    ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
    servletFileUpload.setFileSizeMax(uploadedFileMaxSize);
    uploadedFileMap = new HashMap<String, List<UploadedFile>>();
    UploadedFileFactory uploadedFileFactory = (UploadedFileFactory) FactoryExtensionFinder.getFactory(externalContext, UploadedFileFactory.class);
    // Begin parsing the request for file parts:
    try {
        FileItemIterator fileItemIterator = null;
        HttpServletRequest httpServletRequest = (HttpServletRequest) externalContext.getRequest();
        fileItemIterator = servletFileUpload.getItemIterator(httpServletRequest);
        if (fileItemIterator != null) {
            int totalFiles = 0;
            // For each field found in the request:
            while (fileItemIterator.hasNext()) {
                try {
                    totalFiles++;
                    // Get the stream of field data from the request.
                    FileItemStream fieldStream = (FileItemStream) fileItemIterator.next();
                    // Get field name from the field stream.
                    String fieldName = fieldStream.getFieldName();
                    // Get the content-type, and file-name from the field stream.
                    String contentType = fieldStream.getContentType();
                    boolean formField = fieldStream.isFormField();
                    String fileName = null;
                    try {
                        fileName = fieldStream.getName();
                    } catch (InvalidFileNameException e) {
                        fileName = e.getName();
                    }
                    // Copy the stream of file data to a temporary file. NOTE: This is necessary even if the
                    // current field is a simple form-field because the call below to diskFileItem.getString()
                    // will fail otherwise.
                    DiskFileItem diskFileItem = (DiskFileItem) diskFileItemFactory.createItem(fieldName, contentType, formField, fileName);
                    Streams.copy(fieldStream.openStream(), diskFileItem.getOutputStream(), true);
                    // If the current field is a file, then
                    if (!diskFileItem.isFormField()) {
                        // Get the location of the temporary file that was copied from the request.
                        File tempFile = diskFileItem.getStoreLocation();
                        // If the copy was successful, then
                        if (tempFile.exists()) {
                            // Copy the commons-fileupload temporary file to a file in the same temporary
                            // location, but with the filename provided by the user in the upload. This has two
                            // benefits: 1) The temporary file will have a nice meaningful name. 2) By copying
                            // the file, the developer can have access to a semi-permanent file, because the
                            // commmons-fileupload DiskFileItem.finalize() method automatically deletes the
                            // temporary one.
                            String tempFileName = tempFile.getName();
                            String tempFileAbsolutePath = tempFile.getAbsolutePath();
                            String copiedFileName = stripIllegalCharacters(fileName);
                            String copiedFileAbsolutePath = tempFileAbsolutePath.replace(tempFileName, copiedFileName);
                            File copiedFile = new File(copiedFileAbsolutePath);
                            FileUtils.copyFile(tempFile, copiedFile);
                            // If present, build up a map of headers.
                            Map<String, List<String>> headersMap = new HashMap<String, List<String>>();
                            FileItemHeaders fileItemHeaders = fieldStream.getHeaders();
                            if (fileItemHeaders != null) {
                                Iterator<String> headerNameItr = fileItemHeaders.getHeaderNames();
                                if (headerNameItr != null) {
                                    while (headerNameItr.hasNext()) {
                                        String headerName = headerNameItr.next();
                                        Iterator<String> headerValuesItr = fileItemHeaders.getHeaders(headerName);
                                        List<String> headerValues = new ArrayList<String>();
                                        if (headerValuesItr != null) {
                                            while (headerValuesItr.hasNext()) {
                                                String headerValue = headerValuesItr.next();
                                                headerValues.add(headerValue);
                                            }
                                        }
                                        headersMap.put(headerName, headerValues);
                                    }
                                }
                            }
                            // Put a valid UploadedFile instance into the map that contains all of the
                            // uploaded file's attributes, along with a successful status.
                            Map<String, Object> attributeMap = new HashMap<String, Object>();
                            String id = Long.toString(((long) hashCode()) + System.currentTimeMillis());
                            String message = null;
                            UploadedFile uploadedFile = uploadedFileFactory.getUploadedFile(copiedFileAbsolutePath, attributeMap, diskFileItem.getCharSet(), diskFileItem.getContentType(), headersMap, id, message, fileName, diskFileItem.getSize(), UploadedFile.Status.FILE_SAVED);
                            addUploadedFile(uploadedFileMap, fieldName, uploadedFile);
                            logger.debug("Received uploaded file fieldName=[{0}] fileName=[{1}]", fieldName, fileName);
                        } else {
                            if ((fileName != null) && (fileName.trim().length() > 0)) {
                                Exception e = new IOException("Failed to copy the stream of uploaded file=[" + fileName + "] to a temporary file (possibly a zero-length uploaded file)");
                                UploadedFile uploadedFile = uploadedFileFactory.getUploadedFile(e);
                                addUploadedFile(uploadedFileMap, fieldName, uploadedFile);
                            }
                        }
                    }
                } catch (Exception e) {
                    logger.error(e);
                    UploadedFile uploadedFile = uploadedFileFactory.getUploadedFile(e);
                    String fieldName = Integer.toString(totalFiles);
                    addUploadedFile(uploadedFileMap, fieldName, uploadedFile);
                }
            }
        }
    }// the map so that the developer can have some idea that something went wrong.
     catch (Exception e) {
        logger.error(e);
        UploadedFile uploadedFile = uploadedFileFactory.getUploadedFile(e);
        addUploadedFile(uploadedFileMap, "unknown", uploadedFile);
    }
    return uploadedFileMap;
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) HttpServletRequest(javax.servlet.http.HttpServletRequest) ServletFileUpload(org.apache.commons.fileupload.servlet.ServletFileUpload) ExternalContext(javax.faces.context.ExternalContext) ArrayList(java.util.ArrayList) List(java.util.List) DiskFileItem(org.apache.commons.fileupload.disk.DiskFileItem) UploadedFileFactory(com.liferay.faces.util.model.UploadedFileFactory) FileItemHeaders(org.apache.commons.fileupload.FileItemHeaders) IOException(java.io.IOException) DiskFileItemFactory(org.apache.commons.fileupload.disk.DiskFileItemFactory) InvalidFileNameException(org.apache.commons.fileupload.InvalidFileNameException) IOException(java.io.IOException) UploadedFile(com.liferay.faces.util.model.UploadedFile) FileItemStream(org.apache.commons.fileupload.FileItemStream) UploadedFile(com.liferay.faces.util.model.UploadedFile) File(java.io.File) FileItemIterator(org.apache.commons.fileupload.FileItemIterator) InvalidFileNameException(org.apache.commons.fileupload.InvalidFileNameException)

Example 10 with UploadedFile

use of com.liferay.faces.util.model.UploadedFile in project liferay-faces-alloy by liferay.

the class InputFileDecoderPartImpl method decode.

@Override
public Map<String, List<UploadedFile>> decode(FacesContext facesContext, String location) {
    Map<String, List<UploadedFile>> uploadedFileMap = null;
    ExternalContext externalContext = facesContext.getExternalContext();
    String uploadedFilesFolder = getUploadedFilesFolder(externalContext, location);
    // Using the sessionId, determine a unique folder path and create the path if it does not exist.
    String sessionId = getSessionId(externalContext);
    if (sessionId != null) {
        // FACES-1452: Non-alpha-numeric characters must be removed order to ensure that the folder will be
        // created properly.
        sessionId = sessionId.replaceAll("[^A-Za-z0-9]", "");
        File uploadedFilesPath = new File(uploadedFilesFolder, sessionId);
        if (!uploadedFilesPath.exists()) {
            uploadedFilesPath.mkdirs();
        }
        uploadedFileMap = new HashMap<String, List<UploadedFile>>();
        UploadedFileFactory uploadedFileFactory = (UploadedFileFactory) FactoryExtensionFinder.getFactory(externalContext, UploadedFileFactory.class);
        // Begin parsing the request for file parts:
        try {
            HttpServletRequest httpServletRequest = (HttpServletRequest) externalContext.getRequest();
            Collection<Part> parts = httpServletRequest.getParts();
            int totalFiles = 0;
            // For each part found in the multipart/form-data request:
            for (Part part : parts) {
                try {
                    totalFiles++;
                    // Get field name and file name of the current part.
                    String fieldName = null;
                    String fileName = null;
                    String safeFileName = null;
                    String contentDispositionHeader = part.getHeader("Content-Disposition");
                    String[] keyValuePairs = contentDispositionHeader.split(";");
                    for (String keyValuePair : keyValuePairs) {
                        String trimmedKeyValuePair = keyValuePair.trim();
                        if (trimmedKeyValuePair.startsWith("filename")) {
                            int equalsPos = trimmedKeyValuePair.indexOf("=");
                            fileName = trimmedKeyValuePair.substring(equalsPos + 2, trimmedKeyValuePair.length() - 1);
                            safeFileName = stripIllegalCharacters(fileName);
                        } else if (trimmedKeyValuePair.startsWith("name")) {
                            int equalsPos = trimmedKeyValuePair.indexOf("=");
                            fieldName = trimmedKeyValuePair.substring(equalsPos + 2, trimmedKeyValuePair.length() - 1);
                        }
                    }
                    if ((fileName != null) && (fileName.length() > 0)) {
                        try {
                            long partSize = part.getSize();
                            int uploadedFileMaxSize = WebConfigParam.UploadedFileMaxSize.getIntegerValue(externalContext);
                            if (partSize > uploadedFileMaxSize) {
                                throw new UploadedFileMaxSizeExceededException(fileName, partSize, uploadedFileMaxSize, WebConfigParam.UploadedFileMaxSize.getName());
                            }
                            // Copy the stream of file data to a file.
                            File copiedFile = new File(uploadedFilesPath, safeFileName);
                            String copiedFileAbsolutePath = copiedFile.getAbsolutePath();
                            part.write(copiedFileAbsolutePath);
                            // If present, build up a map of headers.
                            Map<String, List<String>> headersMap = new HashMap<String, List<String>>();
                            Collection<String> headerNames = part.getHeaderNames();
                            for (String headerName : headerNames) {
                                List<String> headerValues = new ArrayList<String>(part.getHeaders(headerName));
                                headersMap.put(headerName, headerValues);
                            }
                            // Get the Content-Type header
                            String contentType = part.getContentType();
                            // Get the charset from the Content-Type header
                            String charSet = null;
                            if (contentType != null) {
                                keyValuePairs = contentType.split(";");
                                for (String keyValuePair : keyValuePairs) {
                                    String trimmedKeyValuePair = keyValuePair.trim();
                                    if (trimmedKeyValuePair.startsWith("charset")) {
                                        int equalsPos = trimmedKeyValuePair.indexOf("=");
                                        charSet = trimmedKeyValuePair.substring(equalsPos + 2, trimmedKeyValuePair.length() - 1);
                                    }
                                }
                            }
                            // Put a valid UploadedFile instance into the map that contains all of the
                            // uploaded file's attributes, along with a successful status.
                            Map<String, Object> attributeMap = new HashMap<String, Object>();
                            String id = Long.toString(((long) hashCode()) + System.currentTimeMillis());
                            String message = null;
                            UploadedFile uploadedFile = uploadedFileFactory.getUploadedFile(copiedFileAbsolutePath, attributeMap, charSet, contentType, headersMap, id, message, fileName, partSize, UploadedFile.Status.FILE_SAVED);
                            addUploadedFile(uploadedFileMap, fieldName, uploadedFile);
                            logger.debug("Received uploaded file fieldName=[{0}] fileName=[{1}]", fieldName, fileName);
                            // Delete temporary file created by the Servlet API.
                            part.delete();
                        } catch (UploadedFileMaxSizeExceededException e) {
                            UploadedFile uploadedFile = uploadedFileFactory.getUploadedFile(e, UploadedFile.Status.FILE_SIZE_LIMIT_EXCEEDED);
                            addUploadedFile(uploadedFileMap, fieldName, uploadedFile);
                        } catch (IOException e) {
                            UploadedFile uploadedFile = uploadedFileFactory.getUploadedFile(e);
                            addUploadedFile(uploadedFileMap, fieldName, uploadedFile);
                        }
                    }
                } catch (Exception e) {
                    logger.error(e);
                    UploadedFile uploadedFile = uploadedFileFactory.getUploadedFile(e);
                    String fieldName = Integer.toString(totalFiles);
                    addUploadedFile(uploadedFileMap, fieldName, uploadedFile);
                }
            }
        }// the map so that the developer can have some idea that something went wrong.
         catch (Exception e) {
            logger.error(e);
            UploadedFile uploadedFile = uploadedFileFactory.getUploadedFile(e);
            addUploadedFile(uploadedFileMap, "unknown", uploadedFile);
        }
    }
    return uploadedFileMap;
}
Also used : UploadedFileFactory(com.liferay.faces.util.model.UploadedFileFactory) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) IOException(java.io.IOException) ServletException(javax.servlet.ServletException) IOException(java.io.IOException) HttpServletRequest(javax.servlet.http.HttpServletRequest) UploadedFile(com.liferay.faces.util.model.UploadedFile) ExternalContext(javax.faces.context.ExternalContext) Part(javax.servlet.http.Part) ArrayList(java.util.ArrayList) List(java.util.List) UploadedFile(com.liferay.faces.util.model.UploadedFile) File(java.io.File)

Aggregations

UploadedFile (com.liferay.faces.util.model.UploadedFile)10 File (java.io.File)6 IOException (java.io.IOException)5 List (java.util.List)5 UploadedFileFactory (com.liferay.faces.util.model.UploadedFileFactory)3 ArrayList (java.util.ArrayList)3 HashMap (java.util.HashMap)3 ExternalContext (javax.faces.context.ExternalContext)3 FacesContext (javax.faces.context.FacesContext)2 HttpServletRequest (javax.servlet.http.HttpServletRequest)2 Part (javax.servlet.http.Part)2 FileUploadEvent (com.liferay.faces.alloy.component.inputfile.FileUploadEvent)1 InputFile (com.liferay.faces.alloy.component.inputfile.InputFile)1 Attachment (com.liferay.faces.demos.applicant.alloy.facelets.dto.Attachment)1 I18n (com.liferay.faces.util.i18n.I18n)1 FileOutputStream (java.io.FileOutputStream)1 OutputStream (java.io.OutputStream)1 RandomAccessFile (java.io.RandomAccessFile)1 HashSet (java.util.HashSet)1 Locale (java.util.Locale)1