package com.zhangmeng.file.utils; import org.csource.common.NameValuePair; import org.csource.fastdfs.*; import org.springframework.core.io.ClassPathResource; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; public class FastDfsClient { static { //从classpath下获取文件对象获取路径 String path = new ClassPathResource("fastDFS.config").getPath(); try { ClientGlobal.init(path); } catch (Exception e) { e.printStackTrace(); } } /** * 图片上传 * * @param file * @return */ public static String[] upload(com.zhangmeng.model.dto.File file) { try { TrackerClient trackerClient = new TrackerClient(); TrackerServer trackerServer = trackerClient.getConnection(); StorageClient storageClient = new StorageClient(trackerServer, null); //参数1 字节数组 //参数2 扩展名(不带点) //参数3 元数据( 文件的大小,文件的作者,文件的创建时间戳) NameValuePair[] meta_list = new NameValuePair[]{new NameValuePair(file.getAuthor()), new NameValuePair(file.getName())}; String[] strings = storageClient.upload_file(file.getContent(), file.getExt(), meta_list); return strings; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 图片下载 * * @param groupName * @param remoteFileName * @return */ public static InputStream downFile(String groupName, String remoteFileName) { ByteArrayInputStream byteArrayInputStream = null; try { //3.创建trackerclient对象 TrackerClient trackerClient = new TrackerClient(); //4.创建trackerserver 对象 TrackerServer trackerServer = trackerClient.getConnection(); //5.创建stroageserver 对象 //6.创建storageclient 对象 StorageClient storageClient = new StorageClient(trackerServer, null); //7.根据组名 和 文件名 下载图片 //参数1:指定组名 //参数2 :指定远程的文件名 byte[] bytes = storageClient.download_file(groupName, remoteFileName); byteArrayInputStream = new ByteArrayInputStream(bytes); return byteArrayInputStream; } catch (Exception e) { e.printStackTrace(); } finally { try { if (byteArrayInputStream != null) { byteArrayInputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } return null; } /** * 图片删除 * * @param groupName * @param remoteFileName */ public static void deleteFile(String groupName, String remoteFileName) { try { //3.创建trackerclient对象 TrackerClient trackerClient = new TrackerClient(); //4.创建trackerserver 对象 TrackerServer trackerServer = trackerClient.getConnection(); //5.创建stroageserver 对象 //6.创建storageclient 对象 StorageClient storageClient = new StorageClient(trackerServer, null); int i = storageClient.delete_file(groupName, remoteFileName); if (i == 0) { System.out.println("删除成功"); } else { System.out.println("删除失败"); } } catch (Exception e) { e.printStackTrace(); } } //根据组名获取组的信息 public static StorageServer getStorages(String groupName) { try { TrackerClient trackerClient = new TrackerClient(); //4.创建trackerserver 对象 TrackerServer trackerServer = trackerClient.getConnection(); //参数1 指定traqckerserver 对象 //参数2 指定组名 StorageServer group1 = trackerClient.getStoreStorage(trackerServer, groupName); return group1; } catch (IOException e) { e.printStackTrace(); } return null; } //根据文件名和组名获取文件的信息 public static FileInfo getFile(String groupName, String remoteFileName) { try { TrackerClient trackerClient = new TrackerClient(); //4.创建trackerserver 对象 TrackerServer trackerServer = trackerClient.getConnection(); StorageClient storageClient = new StorageClient(trackerServer, null); //参数1 指定组名 //参数2 指定文件的路径 FileInfo fileInfo = storageClient.get_file_info(groupName, remoteFileName); return fileInfo; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 根据文件名和组名 获取组信息的数组信息 * * @param groupName * @param remoteFileName * @return ServerInfo[] */ public static ServerInfo[] getServerInfo(String groupName, String remoteFileName) { try { //3.创建trackerclient对象 TrackerClient trackerClient = new TrackerClient(); //4.创建trackerserver 对象 TrackerServer trackerServer = trackerClient.getConnection(); ServerInfo[] group1s = trackerClient.getFetchStorages(trackerServer, groupName, remoteFileName); return group1s; } catch (IOException e) { e.printStackTrace(); } return null; } /** * 获取tracker 的ip和端口的信息 * * @return */ public static String getTrackerUrl() { try { //3.创建trackerclient对象 TrackerClient trackerClient = new TrackerClient(); //4.创建trackerserver 对象 TrackerServer trackerServer = trackerClient.getConnection(); //tracker 的ip的信息 String hostString = trackerServer.getInetSocketAddress().getHostString(); int g_tracker_http_port = ClientGlobal.getG_tracker_http_port(); return "http://" + hostString + ":" + g_tracker_http_port; } catch (IOException e) { e.printStackTrace(); } return null; } }