FastdfsUtil.java 4.89 KB
Newer Older
liqin's avatar
liqin committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
package cn.wisenergy.chnmuseum.party.common.dfs;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Date;
import javax.imageio.ImageIO;

import org.apache.commons.io.FilenameUtils;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * ueditor
 */
public class FastdfsUtil {

	private static final Logger logger = LoggerFactory.getLogger(FastdfsUtil.class);

	private static boolean isInit = false;

	private static void init() throws Exception {
		String classPath = new File(FastdfsUtil.class.getResource("/").getFile()).getCanonicalPath();
		String configFilePath = classPath + File.separator + "fastdfs-client.properties";
		logger.info("FastdfsUtils.init加载配置文件:" + configFilePath);
		ClientGlobal.initByProperties(configFilePath);
	}

	private static TrackerClient getTrackerClient() throws Exception {
		if (!isInit) {
			init();
			isInit = true;
		}

		TrackerClient trackerClient = new TrackerClient();
		return trackerClient;
	}

	private static TrackerServer getTrackerServer() throws Exception {
		return getTrackerClient().getConnection();
	}

	private static StorageClient getStorageClient() throws Exception {
		TrackerServer trackerServer = getTrackerServer();

		// StorageServer storageServer = null;
		// StorageClient storageClient = new StorageClient(trackerServer,
		// storageServer);
		StorageClient storageClient = new StorageClient(trackerServer, null);
		return storageClient;
	}

	/**
	 * 文件方式上传
	 */
	public static Map<String, Object> uploadFile(File file) {
		String fileName = file.getName();
		byte[] fileBuff = FileUtil.getBytes(file);
		return uploadFile(fileBuff, fileName);
	}

	/**
	 * 是否是图片
	 */
	private static boolean isImage(String fileName) {
		return FileTypeUtil.isImageByExtension(fileName);
	}

	/**
	 * 字节流方式上传
	 */
	public static Map<String, Object> uploadFile(byte[] fileBuff, String fileName) {
		String originalFileName = FilenameUtils.getName(fileName);// 文件名
		String fileExtName = FilenameUtils.getExtension(originalFileName);// 文件后缀名
		long length = fileBuff.length;// 字节
		boolean isImage = isImage(originalFileName);
		String mimeType = FileUtil.getMimeType(fileName);
		int width = 0;
		int height = 0;
		if (isImage) {
			int[] imageInfo = getImageInfo(fileBuff);
			if (imageInfo != null) {
				width = imageInfo[0];
				height = imageInfo[1];
			}
		}

		NameValuePair[] metaList = new NameValuePair[] { new NameValuePair("fileName", fileName),
				new NameValuePair("isImage", isImage + ""), new NameValuePair("mimeType", mimeType),
				new NameValuePair("width", width + ""), new NameValuePair("height", height + ""),
				new NameValuePair("author", "FastdfsUtils") };
		boolean status = false;
		String message = "文件上传失败!";
		logger.info("startTIme:" + (new Date().getMinutes()));
		String[] responseData = storeFile(fileBuff, fileExtName, metaList);
		logger.info("startTIme:" + (new Date().getMinutes()));


		Map<String, Object> uploadResult = new HashMap<String, Object>();
		if (responseData != null) {
			status = true;
			message = "文件上传成功!";
			uploadResult.put("isImage", isImage);
			if (isImage) {
				uploadResult.put("width", width);
				uploadResult.put("height", height);
			}
			uploadResult.put("groupName", responseData[0]);
			uploadResult.put("storageFileName", responseData[1]);
			uploadResult.put("link", responseData[0] + "/" + responseData[1]);// 文件访问链接
		}

		uploadResult.put("status", status);
		uploadResult.put("message", message);

		uploadResult.put("fileName", fileName);
		uploadResult.put("mimeType", mimeType);
		uploadResult.put("length", length);

		return uploadResult;
	}

	private static int[] getImageInfo(byte[] fileBuff) {
		try {
			// File转为BufferedImage
			// BufferedImage buff = ImageIO.read(new
			// FileImageInputStream(file));
			// BufferedImage buff = ImageIO.read(file);

			// byte[]转为BufferedImage
			ByteArrayInputStream in = new ByteArrayInputStream(fileBuff);// 将byte[]作为输入流;
			BufferedImage image = ImageIO.read(in);// 将in作为输入流,读取图片存入image中,而这里in可以为ByteArrayInputStream();
			int width = image.getWidth();
			int height = image.getHeight();
			return new int[] { width, height };
		} catch (Exception e) {
			logger.error("FastdfsUtils.getImageInfo时发生异常:", e);
		}
		return new int[] { 0, 0 };
	}

	private static String[] storeFile(byte[] fileBuff, String fileExtName, NameValuePair[] metaList) {
		String[] responseData = null;
		try {
			StorageClient storageClient = getStorageClient();
			responseData = storageClient.upload_file(fileBuff, fileExtName.toLowerCase(), metaList);
		} catch (Exception e) {
			logger.error("FastdfsUtils.storeFile时发生异常:", e);
		}
		return responseData;
	}

}