package com.beautifulsoup.driving.utils; import com.beautifulsoup.driving.common.DrivingConstant; import com.beautifulsoup.driving.common.FastDfsFile; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.csource.common.NameValuePair; import org.csource.fastdfs.*; import org.springframework.core.io.ClassPathResource; import org.springframework.web.multipart.MultipartException; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; @Slf4j public class FastDfsClientUtil { static { try { String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();; ClientGlobal.init(filePath); } catch (Exception e) { log.error("FastDFS Client Init Fail!",e); } } public static String uploadFiles(MultipartFile[] files){ List<String> paths= Lists.newArrayList(); if (files!=null&&files.length>0){ for (int i=0;i<files.length;i++){ if(files[i].isEmpty()){ throw new MultipartException(DrivingConstant.File.UPLOAD_EMPTY_ERROR); } try { String path = saveFile(files[i]); paths.add(path); } catch (IOException e) { throw new MultipartException(DrivingConstant.File.UPLOAD_FAILURE); } } } return String.join(",",paths);//java 8 } public static String saveFile(MultipartFile multipartFile) throws IOException { String[] fileAbsolutePath={}; String fileName=multipartFile.getOriginalFilename(); String ext = fileName.substring(fileName.lastIndexOf(".") + 1); byte[] file_buff = null; InputStream inputStream=multipartFile.getInputStream(); if(inputStream!=null){ int len1 = inputStream.available(); file_buff = new byte[len1]; inputStream.read(file_buff); } inputStream.close(); FastDfsFile file = new FastDfsFile(fileName, file_buff, ext); try { fileAbsolutePath = FastDfsClientUtil.upload(file); //upload to fastdfs } catch (Exception e) { log.error("upload file Exception!",e); } if (fileAbsolutePath==null) { log.error("upload file failed,please upload again!"); } String path= FastDfsClientUtil.getTrackerUrl()+fileAbsolutePath[0]+ "/"+fileAbsolutePath[1]; return path; } public static String[] upload(FastDfsFile file) { log.info("File Name: " + file.getName() + "File Length:" + file.getContent().length); NameValuePair[] meta_list = new NameValuePair[1]; meta_list[0] = new NameValuePair("author", file.getAuthor()); long startTime = System.currentTimeMillis(); String[] uploadResults = null; StorageClient storageClient=null; try { storageClient = getStorageClient(); uploadResults = storageClient.upload_file(file.getContent(), file.getExt(), meta_list); } catch (IOException e) { log.error("IO Exception when uploadind the file:" + file.getName(), e); } catch (Exception e) { log.error("Non IO Exception when uploadind the file:" + file.getName(), e); } log.info("upload_file time used:" + (System.currentTimeMillis() - startTime) + " ms"); if (uploadResults == null && storageClient!=null) { log.error("upload file fail, error code:" + storageClient.getErrorCode()); } log.info("upload file successfully!!!" + "group_name:" + uploadResults[0] + ", remoteFileName:" + " " + uploadResults[1]); return uploadResults; } public static FileInfo getFile(String groupName, String remoteFileName) { try { StorageClient storageClient = getStorageClient(); return storageClient.get_file_info(groupName, remoteFileName); } catch (IOException e) { log.error("IO Exception: Get File from Fast DFS failed", e); } catch (Exception e) { log.error("Non IO Exception: Get File from Fast DFS failed", e); } return null; } public static InputStream downFile(String groupName, String remoteFileName) { try { StorageClient storageClient = getStorageClient(); byte[] fileByte = storageClient.download_file(groupName, remoteFileName); InputStream ins = new ByteArrayInputStream(fileByte); return ins; } catch (IOException e) { log.error("IO Exception: Get File from Fast DFS failed", e); } catch (Exception e) { log.error("Non IO Exception: Get File from Fast DFS failed", e); } return null; } public static void deleteFile(String groupName, String remoteFileName) throws Exception { StorageClient storageClient = getStorageClient(); int i = storageClient.delete_file(groupName, remoteFileName); log.info("delete file successfully!!!" + i); } public static StorageServer[] getStoreStorages(String groupName) throws IOException { TrackerClient trackerClient = new TrackerClient(); TrackerServer trackerServer = trackerClient.getConnection(); return trackerClient.getStoreStorages(trackerServer, groupName); } public static ServerInfo[] getFetchStorages(String groupName, String remoteFileName) throws IOException { TrackerClient trackerClient = new TrackerClient(); TrackerServer trackerServer = trackerClient.getConnection(); return trackerClient.getFetchStorages(trackerServer, groupName, remoteFileName); } public static String getTrackerUrl() throws IOException { return "http://"+getTrackerServer().getInetSocketAddress().getHostString()+":"+ClientGlobal.getG_tracker_http_port()+"/"; } private static StorageClient getStorageClient() throws IOException { TrackerServer trackerServer = getTrackerServer(); StorageClient storageClient = new StorageClient(trackerServer, null); return storageClient; } private static TrackerServer getTrackerServer() throws IOException { TrackerClient trackerClient = new TrackerClient(); TrackerServer trackerServer = trackerClient.getConnection(); return trackerServer; } }