package com.cku.upyun;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import com.cku.upyun.UpYun.PARAMS;

public class ImageFtp {
	public static String UPYUNWEBURL = "http://upyun.chongaibao.com/";
	public static String IMAGE_PATH = "cab/image/image";
	public static String AVATAR_PATH = "cab/image/avatar";
	public static String VIDEO_PATH = "cab/video/video";
	public static String WEB_CONTENT_PATH = "cab/web/content";

	public static String IMAGE_PATH_TEST = "cab_test/image/image";
	public static String AVATAR_PATH_TEST = "cab_test/image/avatar";
	public static String VIDEO_PATH_TEST = "cab_test/video/video";
	public static String WEB_CONTENT_TEST = "cab_test/web/content";
	
	public static String BASE_BUCKET_URL = "http://upyun.chongaibao.com";
	
	private static String USERNAME = "chongaibao";
	private static String BUCKET = "chongaibao";
	private static String PASSWORD = "chongai.,";
	
	public static String uploadBytes(String basePath, String path, byte[] data)
	{
		UpYun uy = new UpYun(USERNAME, BUCKET, PASSWORD);
		uy.writeFile(basePath + "/" + path, data);

		return BASE_BUCKET_URL + "/" + basePath + "/" + path;
	}
	
	/**
	 * 图片压缩
	 * @param basePath
	 * @param path
	 * @param data
	 * @return
	 * @throws IOException
	 */
	public static String uploadGmkerlBytes(String basePath, String path, byte[] data) throws IOException {
		path = "min_"+path;
		UpYun uy = new UpYun(USERNAME, BUCKET, PASSWORD);
		// 设置缩略图的参数
		Map<String, String> params = new HashMap<String, String>();

		// 设置缩略图类型，必须搭配缩略图参数值（KEY_VALUE）使用，否则无效
		params.put(PARAMS.KEY_X_GMKERL_TYPE.getValue(),
				PARAMS.VALUE_FIX_BOTH.getValue());

		// 设置缩略图参数值，必须搭配缩略图类型（KEY_TYPE）使用，否则无效
		params.put(PARAMS.KEY_X_GMKERL_VALUE.getValue(), "150x150");

		// 设置缩略图的质量，默认 95
		params.put(PARAMS.KEY_X_GMKERL_QUALITY.getValue(), "95");

		// 设置缩略图的锐化，默认锐化（true）
		params.put(PARAMS.KEY_X_GMKERL_UNSHARP.getValue(), "true");

		// 若在 upyun 后台配置过缩略图版本号，则可以设置缩略图的版本名称
		// 注意：只有存在缩略图版本名称，才会按照配置参数制作缩略图，否则无效
		params.put(PARAMS.KEY_X_GMKERL_THUMBNAIL.getValue(), "small");

		// 上传文件，并自动创建父级目录（最多10级）
		uy.writeFile(basePath + "/" + path, data, true, params);
		return BASE_BUCKET_URL + "/" + basePath + "/" + path;

	}
	/**
	 * 图片删除
	 */
	public static void deleteFile(String filePath) {
		UpYun uy = new UpYun(USERNAME, BUCKET, PASSWORD);
		// 删除文件
		uy.deleteFile(filePath);
	}
	public static String uploadFile(String basePath, String path, String localFile) throws IOException
	{
		FileInputStream fis = null;
		
		try
		{
			fis = new FileInputStream(localFile);
			
			String result = uploadStream(basePath, path, fis);
			return result;
		}
		finally
		{
			if (fis != null) try { fis.close(); } catch (Exception e) {}
		}
	}

	public static String uploadStream(String basePath, String path, InputStream is) throws IOException {

		ByteArrayOutputStream baos = null;

		try
		{
			baos = new ByteArrayOutputStream();
			
			byte[] buffer = new byte[64 << 8]; // 64K
			while (true)
			{
				int read = is.read(buffer);
				if (read == -1)
				{
					break;
				}
				
				baos.write(buffer, 0, read);
			}
			
			return uploadBytes(basePath, path, baos.toByteArray());
		}
		finally
		{
			if (baos != null) try { baos.close(); } catch (Exception e) {}
		}
	}
}
