Package org.openfaces.util

Source Code of org.openfaces.util.FileUploadRequestWrapper

/*
* OpenFaces - JSF Component Library 2.0
* Copyright (C) 2007-2012, TeamDev Ltd.
* licensing@openfaces.org
* Unless agreed in writing the contents of this file are subject to
* the GNU Lesser General Public License Version 2.1 (the "LGPL" License).
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* Please visit http://openfaces.org/licensing/ for more details.
*/

package org.openfaces.util;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.openfaces.event.FileUploadItem;
import org.openfaces.event.FileUploadStatus;
import org.openfaces.renderkit.input.AbstractFileUploadRenderer;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;

public class FileUploadRequestWrapper extends HttpServletRequestWrapper {

    private static final String FIELD_NAME = "::inputs::input";

    public FileUploadRequestWrapper(HttpServletRequest request, String tempDirPath, final long maxSizeOfFile, String uniqueFileId) {
        super(request);
        final String contentLength = request.getHeader("content-length");
        if (contentLength == null)
            return;

        try {
            ServletFileUpload upload = new ServletFileUpload();
            upload.setFileItemFactory(new ProgressMonitorFileItemFactory(request, maxSizeOfFile, uniqueFileId));
            List<FileItem> fileItems = upload.parseRequest(request);
            for (FileItem fileItem : fileItems) {
                if (!fileItem.isFormField()) {
                    if (fileItem.getSize() != 0) {
                        if (request.getSession().getAttribute(uniqueFileId + AbstractFileUploadRenderer.TERMINATED_TEXT) == null) {
                            String correctFileName = getCorrectFileName(fileItem.getName());
                            File f = writeFile(fileItem, tempDirPath, correctFileName);
                            int index = fileItem.getFieldName().indexOf(FIELD_NAME);
                            String genericNameForFile = fileItem.getFieldName().substring(0, index + FIELD_NAME.length());
                            request.setAttribute(genericNameForFile, new FileUploadItem(correctFileName, f, FileUploadStatus.SUCCESSFUL));
                            request.setAttribute("FILE_ID", uniqueFileId);
                        } else {
                            request.getSession().removeAttribute(uniqueFileId + AbstractFileUploadRenderer.TERMINATED_TEXT);
                        }
                    } else {
                        throw new RuntimeException("File size is equal 0 bytes");
                    }
                }
            }

        } catch (FileUploadException fe) {
            /*this exception can happened in case if something wrong with file or we stopped manually*/
            request.getSession().setAttribute(uniqueFileId + AbstractFileUploadRenderer.TERMINATED_TEXT, true);
        } catch (IOException ne) {
            /*this exception can happened in case if problem in writing file*/
            request.getSession().setAttribute(uniqueFileId + AbstractFileUploadRenderer.TERMINATED_TEXT, true);
        } catch (Exception e) {
            /*this exception can happened if on server some problem*/
            request.getSession().setAttribute(uniqueFileId + AbstractFileUploadRenderer.TERMINATED_TEXT, true);
        }
    }

    private File writeFile(FileItem fileItem, String tempDirPath, String correctFileName) throws IOException {
        File f = getAndChangeFileNameIfNeeded(tempDirPath, correctFileName);

        OutputStream out = new FileOutputStream(f);
        int read = 0;
        byte[] bytes = new byte[1024];
        InputStream inputStream = fileItem.getInputStream();
        while ((read = inputStream.read(bytes)) != -1) {
            out.write(bytes, 0, read);
        }
        inputStream.close();
        out.flush();
        out.close();
        return f;
    }

    private File getAndChangeFileNameIfNeeded(String tempDirPath, String fileName) {
        File f = new File(tempDirPath + "\\" + fileName);
        int i = 0;
        while (f.isFile()) {
            f = new File(tempDirPath + "\\copy_" + i + "_" + fileName);
            i++;
        }
        return f;
    }
    private String getCorrectFileName(String notCorrectName) throws UnsupportedEncodingException{
        String correctFileName = new String(notCorrectName.getBytes(), "UTF-8"); // for cyrillic symbols in fileName
        int indexOfSlash = correctFileName.lastIndexOf("\\");
        return (indexOfSlash == -1) ? correctFileName : correctFileName.substring(indexOfSlash + 1);
    }

}
TOP

Related Classes of org.openfaces.util.FileUploadRequestWrapper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.