package com.yonge.toolset.utils.upload;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;

import com.yonge.toolset.utils.codec.NumEncodeUtil;
import com.yonge.toolset.base.exception.UtilException;

/** 
 * @author sunzl 
 * 2015年7月20日 上午11:56:51 
 * 上传工具类
 */
public class UploadUtil {

	/**
	 * 日期格式化工具
	 */


	/**
	 * 校验上传文件的合法性
	 * @param fileName
	 * @param puffixs
	 * @return
	 */
	public static boolean validateImgFile(String ext, String puffixs) {

		String[] puffixArr = puffixs.split(",");

		List<String> puffixList = Arrays.asList(puffixArr);

		if (StringUtils.isBlank(ext)) {
			return false;
		}
		if (puffixList.contains(ext.toLowerCase())) {
			return true;
		}
		return false;
	}

	/**
	 * 获得文件的扩展名
	 * @param fileName
	 * @return
	 */
	public static String getExtension(String fileName) {
		if (StringUtils.isBlank(fileName)) {
			return "";
		}
		if (fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0) {
			return fileName.substring(fileName.lastIndexOf(".") + 1);
		}

		return "";
	}

	/**
	 * 获得文件原名称
	 * @param fileName
	 * @return
	 */
	public static String getOriFileName(String fileName) {
		if (StringUtils.isBlank(fileName)) {
			return "";
		}
		if (fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0) {
			return fileName.substring(0, fileName.lastIndexOf("."));
		}

		return "";
	}

	/**
	 * 获取文件名称
	 * @param path
	 * @param dir
	 * @param ext
	 * @return
	 */
	public static String getFileName(String ext) {
		String fileName = "";
		fileName = NumEncodeUtil.longToN62(System.currentTimeMillis()) + "." + ext;
		return fileName;
	}

	/**
	 * 获得上传路径
	 * @param root
	 * @param dir
	 * @return
	 */
	public static String getFilePath(String root, String dir, String floder) {
		String path = root + dir + floder;
		return path;
	}

	/**
	 * 获得上传图片的文件夹
	 * @return
	 */
	public static String getFileFloder() {
		DateFormat format = new SimpleDateFormat("yyyyMM/");
		String floder = format.format(new Date());
		return floder;
	}

	/**
	 * 获得上传zip的文件夹
	 * @return
	 */
	public static String getZipFloder() {
		DateFormat format = new SimpleDateFormat("yyyyMMddhhmmss/");
		String floder = format.format(new Date());
		return floder;
	}

	/**
	 * 创建zip解压后的文件夹
	 * @return
	 */
	public static String getZipFolder(String root, String dir, String dataStr) {
		String folder = root + dir + dataStr;
		return folder;
	}

	/**
	 * 上传文件的工具方法
	 * @param in
	 * @param path
	 * @return
	 */
	public static boolean uploadFile(InputStream inputStream, String filePath, String fileName) {
		try {
			File file = new File(filePath + "/" + fileName);
			if (!file.getParentFile().exists()) {
				file.getParentFile().mkdirs();
			}
			FileOutputStream fos = new FileOutputStream(file);
			IOUtils.copy(inputStream, fos);
			if (!file.exists() || file.length() == 0) {
				throw new UtilException("图片上传出现错误，请重新上传");
			}
		} catch (IOException e) {
			throw new UtilException("图片上传失败", e);
		} finally {
			IOUtils.closeQuietly(inputStream);
		}
		return true;
	}
}
