com.glaf.core.util.UploadUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.glaf.core.util.UploadUtils.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.glaf.core.util;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import com.glaf.core.config.SystemProperties;
import com.glaf.core.util.FileUtils;

public class UploadUtils {
    protected final static Log logger = LogFactory.getLog(UploadUtils.class);

    public final static String UPLOAD_DIR = "/upload/";

    /**
     * ??
     * 
     * @param request
     * @param fileParam
     * @return
     */
    public static byte[] getBytes(HttpServletRequest request, String fileParam) {
        MultipartFile mFile = getMultipartFile(request, fileParam);
        byte[] bytes = null;
        try {
            if (mFile != null && !mFile.isEmpty()) {
                bytes = mFile.getBytes();
            }
        } catch (Exception ex) {
            logger.error(ex.getMessage());
            ex.printStackTrace();
        }
        return bytes;
    }

    /**
     * ??
     * 
     * @param request
     * @param fileParam
     * @return
     */
    public static InputStream getInputStream(HttpServletRequest request, String fileParam) {
        MultipartFile mFile = getMultipartFile(request, fileParam);
        InputStream inputStream = null;
        try {
            if (mFile != null && !mFile.isEmpty()) {
                inputStream = mFile.getInputStream();
            }
        } catch (Exception ex) {
            logger.error(ex.getMessage());
            ex.printStackTrace();
        }
        return inputStream;
    }

    /**
     * ?MultipartFile
     * 
     * @param request
     * @param fileParam
     * @param uploadDir
     * @return
     */
    public static MultipartFile getMultipartFile(HttpServletRequest request, String fileParam) {
        MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
        return mRequest.getFile(fileParam);
    }

    private static String getSuffix(String fileName) {
        return fileName.substring(fileName.lastIndexOf("."));
    }

    /**
     * ??
     */
    public static String getUploadAbsolutePath(String uploadDir) {
        if (StringUtils.isEmpty(uploadDir)) {
            return SystemProperties.getAppPath() + uploadDir;
        } else {
            return SystemProperties.getAppPath() + UPLOAD_DIR;
        }
    }

    /**
     * ?
     */
    public static String getUploadRelativePath(String uploadDir) {
        if (StringUtils.isEmpty(uploadDir)) {
            return uploadDir;
        } else {
            return UPLOAD_DIR;
        }
    }

    /**
     * ????
     */
    public static int getUploadStatus(HttpServletRequest request, String fileParam, String fileType) {
        return getUploadStatus(request, fileParam, fileType, -1);
    }

    /**
     * ????
     * 
     * @param request
     * @param fileParam
     * @param fileType
     *            ?:jpg,gif,png,jpeg,swf
     * @param fileSize
     *            MB??
     * @return status=0 ?<br/>
     *         status=1 <br/>
     *         status=2 ?<br/>
     */
    public static int getUploadStatus(HttpServletRequest request, String fileParam, String fileType,
            long fileSize) {
        int status = 0;
        MultipartFile mFile = getMultipartFile(request, fileParam);
        if (!mFile.isEmpty()) {
            String ext = FileUtils.getFileExt(mFile.getOriginalFilename());
            if (!StringUtils.containsIgnoreCase(fileType, ext)) {
                status = 1;
            }
            long size = mFile.getSize();
            if (fileSize != -1 && size > FileUtils.MB_SIZE * fileSize) {
                status = 2;
            }
        }
        return status;
    }

    public static String mkdirs(String root) {
        String sp = File.separator;
        String parent = String.valueOf(DateUtils.getNowYearMonth());
        String child = String.valueOf(DateUtils.getNowYearMonthDay());
        String path = root + sp + parent + sp + child;
        File dir = new File(path);
        if (!dir.exists() || !dir.isDirectory()) {
            try {
                FileUtils.mkdirs(path);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return path;
    }

    /**
     * ???
     * 
     * @param name
     * @return
     */
    public static String rename(String name) {
        Long now = Long.parseLong(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
        String fileName = name;
        if (name.indexOf(".") != -1) {
            fileName = name.substring(0, name.lastIndexOf(".")) + "_" + now + name.substring(name.lastIndexOf("."));
        }
        return fileName;
    }

    /**
     * 
     */
    public static String upload(HttpServletRequest request, String fileParam) {
        return upload(request, fileParam, null);
    }

    /**
     * 
     * 
     * @param request
     * @param fileParam
     * @param uploadDir
     *            ?
     * @return 
     */
    public static String upload(HttpServletRequest request, String fileParam, String uploadDir) {
        MultipartFile mFile = getMultipartFile(request, fileParam);
        String filePath = "";
        try {
            String pathDir = mkdirs(getUploadAbsolutePath(uploadDir));
            if (!mFile.isEmpty()) {
                String fileName = mFile.getOriginalFilename();
                String saveName = rename(fileName);
                mFile.transferTo(new File(getUploadAbsolutePath(uploadDir) + pathDir + saveName));
                filePath = getUploadRelativePath(uploadDir) + pathDir + saveName;
            }
        } catch (Exception ex) {
            logger.error(ex.getMessage());
            ex.printStackTrace();
        }
        return filePath;
    }

    /**
     * 
     * 
     * @param request
     * @param fileParam
     * @param uploadDir
     *            ?
     * @return 
     */
    public static String upload(HttpServletRequest request, String fileParam, String uploadDir,
            String fileNameParam) {
        MultipartFile mFile = getMultipartFile(request, fileParam);
        String filePath = "";
        if (StringUtils.isEmpty(uploadDir)) {
            uploadDir = UPLOAD_DIR;
        }
        try {
            FileUtils.mkdirs(getUploadAbsolutePath(uploadDir));
            if (!mFile.isEmpty()) {
                String fileName = mFile.getOriginalFilename();
                String saveName = "";
                if (StringUtils.isEmpty(fileNameParam)) {
                    saveName = fileNameParam + getSuffix(fileName);
                } else {
                    saveName = rename(fileName);
                }
                mFile.transferTo(new File(getUploadAbsolutePath(uploadDir) + saveName));
                filePath = uploadDir + saveName;
            }
        } catch (Exception ex) {
            logger.error(ex.getMessage());
            ex.printStackTrace();
        }
        return filePath;
    }

}