package cn.wisenergy.chnmuseum.party.common.dfs; import org.apache.commons.io.FilenameUtils; import org.csource.common.MyException; import org.csource.common.NameValuePair; import org.csource.fastdfs.*; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ClassPathResource; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Properties; /** * 上传图片到FastDFS */ public class FastDFSUtils { private static String dfsFileAccessBasePath; @Value("${dfsFileAccessBasePath:#{null}}") public static void setDfsFileAccessBasePath(String dfsFileAccessBasePath) { FastDFSUtils.dfsFileAccessBasePath = dfsFileAccessBasePath; } static { try { Properties props = new Properties(); final InputStream in = new ClassPathResource("fastdfs-client.properties").getInputStream(); props.load(in); ClientGlobal.initByProperties(props); } catch (IOException | MyException e) { e.printStackTrace(); } } public static String[] uploadPic(String path, String fileName, long size) { String[] fileIds = null; try { // ClientGloble 读配置文件 // 老大客户端 TrackerClient trackerClient = new TrackerClient(); TrackerServer trackerServer = trackerClient.getConnection(); StorageServer storageServer = null; StorageClient storageClient = new StorageClient(trackerServer, storageServer); String extName = FilenameUtils.getExtension(fileName); NameValuePair[] meta_list = new NameValuePair[3]; meta_list[0] = new NameValuePair("fileName", fileName); meta_list[1] = new NameValuePair("fileExt", extName); meta_list[2] = new NameValuePair("fileSize", String.valueOf(size)); // http://172.16.15.244:8081/group1/M00/00/00/rBAP9FfFG62AZsuBAADeW7MfEHA287.png // group1/M00/00/01/wKjIgFWOYc6APpjAAAD-qk29i78248.jpg fileIds = storageClient.upload_file(path, extName, meta_list); } catch (Exception e) { e.printStackTrace(); } return fileIds; } public static String uploadInputStream(InputStream inStream, String fileName, long size) { String[] fileIds; try { // ClientGloble 读配置文件 // 老大客户端 TrackerClient trackerClient = new TrackerClient(); TrackerServer trackerServer = trackerClient.getConnection(); StorageServer storageServer = null; StorageClient storageClient = new StorageClient(trackerServer, storageServer); String extName = FilenameUtils.getExtension(fileName); NameValuePair[] meta_list = new NameValuePair[3]; meta_list[0] = new NameValuePair("fileName", fileName); meta_list[1] = new NameValuePair("fileExt", extName); meta_list[2] = new NameValuePair("fileSize", String.valueOf(size)); fileIds = storageClient.upload_file(null, size, new UploadFileSender(inStream), extName, meta_list); return dfsFileAccessBasePath + "/" + fileIds[0] + "/" + fileIds[1]; } catch (Exception e) { e.printStackTrace(); } return null; } public static String uploadPic(byte[] pic, String fileName, long size) { String[] fileIds = null; try { // ClientGloble 读配置文件 // 老客户端 TrackerClient trackerClient = new TrackerClient(); TrackerServer trackerServer = trackerClient.getConnection(); StorageServer storageServer = null; StorageClient storageClient = new StorageClient(trackerServer, storageServer); String extName = FilenameUtils.getExtension(fileName); // 设置图片meta信息 NameValuePair[] meta_list = new NameValuePair[3]; meta_list[0] = new NameValuePair("fileName", fileName); meta_list[1] = new NameValuePair("fileExt", extName); meta_list[2] = new NameValuePair("fileSize", String.valueOf(size)); // 上传且返回path fileIds = storageClient.upload_file(pic, extName, meta_list); return fileIds[0] + "/" + fileIds[1]; } catch (Exception e) { e.printStackTrace(); } return null; } public static boolean deletePic(String fileUrl) { try { TrackerClient tracker = new TrackerClient(); TrackerServer trackerServer = tracker.getConnection(); StorageServer storageServer = null; StorageClient storageClient = new StorageClient(trackerServer, storageServer); StorePath storePath = StorePath.praseFromUrl(fileUrl); int i = storageClient.delete_file(storePath.getGroup(), storePath.getPath()); System.out.println(i == 0 ? "删除成功" : "删除失败:" + i); return i == 0; } catch (Exception e) { e.printStackTrace(); } return false; } public static String deletePic(String[] fileIds) { try { TrackerClient tracker = new TrackerClient(); TrackerServer trackerServer = tracker.getConnection(); StorageServer storageServer = null; StorageClient storageClient = new StorageClient(trackerServer, storageServer); int i = storageClient.delete_file(fileIds[0], fileIds[1]); System.out.println(i == 0 ? "删除成功" : "删除失败:" + i); } catch (Exception e) { e.printStackTrace(); } return fileIds[1]; } private static class UploadFileSender implements UploadCallback { private InputStream is; public UploadFileSender(InputStream is) { this.is = is; } @Override public int send(OutputStream out) throws IOException { byte[] b = new byte[1024]; int readBytes; while ((readBytes = is.read(b)) != -1) { out.write(b, 0, readBytes); } return 0; } } }