importorg.apache.commons.io.FilenameUtils;importorg.apache.commons.io.IOUtils;importorg.apache.log4j.Logger;importorg.csource.common.NameValuePair;import org.csource.fastdfs.*;import java.io.*;importjava.util.HashMap;importjava.util.Iterator;importjava.util.Map;/*** @Description FastDFS文件上传下载工具类*/
public final classFastDFSClient {private static final Logger logger = Logger.getLogger(FastDFSClient.class);/*直接放在类路径下, 不能在前面加入 / 符号(/fdfs_client.conf)*/
private static final String CONFIG_FILENAME = "fdfs_client.conf";private static StorageClient1 storageClient1 = null;static{try{//加载连接信息
ClientGlobal.init(CONFIG_FILENAME);//创建TrackerClient对象
TrackerClient trackerClient = newTrackerClient();//获取TrackerServer对象
TrackerServer trackerServer =trackerClient.getConnection();if (trackerServer == null) {throw new IllegalStateException("getConnection return null");
}//创建StorageServer对象
StorageServer storageServer =trackerClient.getStoreStorage(trackerServer);if (storageServer == null) {throw new IllegalStateException("getStoreStorage return null");
}//使用TrackerServer和StorageServer构造StorageClient对象
storageClient1 = newStorageClient1(trackerServer,storageServer);
}catch(Exception e) {
logger.error("创建storage client失败:" +e);
}
}privateFastDFSClient(){}/*** 上传文件
*@paramfile 文件对象
*@paramfileName 文件名
*@return
*/
public staticString uploadFile(File file, String fileName) {return uploadFile(file,fileName,null);
}/*** 上传文件
*@paramfile 文件对象
*@paramfileName 文件名
*@parammetaList 文件元数据
*@return
*/
public static String uploadFile(File file, String fileName, MapmetaList) {try{byte[] buff = IOUtils.toByteArray(newFileInputStream(file));
NameValuePair[] nameValuePairs= null;if (metaList != null) {
nameValuePairs= newNameValuePair[metaList.size()];int index = 0;for (Iterator> iterator =metaList.entrySet().iterator(); iterator.hasNext();) {
Map.Entry entry =iterator.next();
String name=entry.getKey();
String value=entry.getValue();
nameValuePairs[index++] = newNameValuePair(name,value);
}
}returnstorageClient1.upload_file1(buff, FilenameUtils.getExtension(fileName), nameValuePairs);
}catch(Exception e) {
logger.error("上传文件失败:" +e);
}return null;
}/*** 获取文件元数据
*@paramfileId 文件ID
*@return
*/
public static MapgetFileMetadata(String fileId) {try{
NameValuePair[] metaList=storageClient1.get_metadata1(fileId);if (metaList != null) {
HashMap map = new HashMap();for(NameValuePair metaItem : metaList) {
map.put(metaItem.getName(),metaItem.getValue());
}returnmap;
}
}catch(Exception e) {
logger.error("获取文件元数据失败:" +e);
}return null;
}/*** 删除文件
*@paramfileId 文件ID
*@return删除失败返回-1,否则返回0*/
public static intdeleteFile(String fileId) {try{returnstorageClient1.delete_file1(fileId);
}catch(Exception e) {
logger.error("删除文件失败:" +e);
}return -1;
}/*** 下载文件
*@paramfileId 文件ID(上传文件成功后返回的ID)
*@paramoutFile 文件下载保存位置
*@return
*/
public static intdownloadFile(String fileId, File outFile) {
FileOutputStream fos= null;
ByteArrayInputStream in= null;try{byte[] content =storageClient1.download_file1(fileId);
in= new ByteArrayInputStream(content, 1, content.length);
fos= newFileOutputStream(outFile);
IOUtils.copy(in,fos);return 0;
}catch(Exception e) {
logger.error("下载文件失败:" +e);
}finally{if (in != null) {try{
in.close();
}catch(IOException e) {
logger.error("下载文件完毕后, 关闭输入流失败" +e);
}
}if (fos != null) {try{
fos.close();
}catch(IOException e) {
logger.error("下载文件完毕后, 关闭输出流失败" +e);
}
}
}return -1;
}
}