fastdfs-client-javaを使用してfastDFSを操作する

9124 ワード

1.環境インストール:
参照先:
https://blog.csdn.net/cencfeng11/article/details/95977300
fastDFSの構成が完了しました
https://github.com/happyfish100/fastdfs-client-javaソースのダウンロード
コマンド:
mvn clean install
牙列缺损
mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=5.0.4 -Dpackaging=jar -Dfile=D:\fastdfs-java\fastdfs-client-java-1.27-SNAPSHOT.JAr-----(名前)
元のコマンドは次のとおりです.
mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=${version} -Dpackaging=jar -Dfile=fastdfs-client-java-${version}.jar

 
JAvaコード:
  • 新規ファイルfdfs_client.conf,内容は,今回プロファイル構成により,静的モジュール初期化
  • connect_timeout = 60
    network_timeout = 60
    charset = UTF-8
    http.tracker_http_port = 8999
    http.anti_steal_token = no
    http.secret_key = 123456
    tracker_server = 18.223.50.104:22122
    
  • 新規FastDFSclientクラス
  • package com.fashion.mjysite.util;
    
    import com.fashion.mjysite.entity.FastDFSFile;
    import org.csource.fastdfs.*;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.core.io.ClassPathResource;
    import org.csource.common.NameValuePair;
    
    import java.io.ByteArrayInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    public class FastDFSClient {
        private static final Logger logger = LoggerFactory.getLogger(FastDFSClient.class);
        //  static       
        static {
            try {
                String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();;
                ClientGlobal.init(filePath);
            } catch (Exception e) {
                logger.error("FastDFS Client Init Fail!",e);
            }
        }
        public static String[] upload(FastDFSFile file) {
            //logger.info("File Name: " + file.getName() + "File Length:" + file.getContent().length);
            NameValuePair[] meta_list = new NameValuePair[1];
            meta_list[0] = new NameValuePair("author", file.getAuthor());
            String[] uploadResults = null;
            StorageClient storageClient=null;
            try {
                storageClient = getTrackerClient();
                uploadResults = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);
            } catch (IOException e) {
                logger.error("IO Exception when uploadind the file:" + file.getName(), e);
            } catch (Exception e) {
                logger.error("Non IO Exception when uploadind the file:" + file.getName(), e);
            }
            //logger.info("upload_file time used:" + (System.currentTimeMillis()) + " ms");
    
            if (uploadResults == null && storageClient!=null) {
                logger.error("upload file fail, error code:" + storageClient.getErrorCode());
            }
            String groupName = uploadResults[0];
            String remoteFileName = uploadResults[1];
    
            //logger.info("upload file successfully!!!" + "group_name:" + groupName + ", remoteFileName:" + " " + remoteFileName);
            return uploadResults;
        }
        public static FileInfo getFile(String groupName, String remoteFileName) {
            try {
                StorageClient storageClient = getTrackerClient();
                return storageClient.get_file_info(groupName, remoteFileName);
            } catch (IOException e) {
                logger.error("IO Exception: Get File from Fast DFS failed", e);
            } catch (Exception e) {
                logger.error("Non IO Exception: Get File from Fast DFS failed", e);
            }
            return null;
        }
    
        public static InputStream downFile(String groupName, String remoteFileName) {
            try {
                StorageClient storageClient = getTrackerClient();
                byte[] fileByte = storageClient.download_file(groupName, remoteFileName);
                InputStream ins = new ByteArrayInputStream(fileByte);
                return ins;
            } catch (IOException e) {
                logger.error("IO Exception: Get File from Fast DFS failed", e);
            } catch (Exception e) {
                logger.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 = getTrackerClient();
            int i = storageClient.delete_file(groupName, remoteFileName);
            //logger.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 getTrackerClient() 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;
        }
    }
    
  • 新規クラスFastDFSFile
  • package com.fashion.mjysite.entity;
    
    public class FastDFSFile {
        private String name;
        private byte[] content;
        private String ext;
        private String md5;
        private String author;
        public FastDFSFile(String name, byte[] content, String ext, String md5, String author){
            super();
            this.name = name;
            this.content = content;
            this.ext = ext;
            this.md5 = md5;
            this.author = author;
        }
        public FastDFSFile(String name, byte[] content, String ext){
            super();
            this.name = name;
            this.content = content;
            this.ext = ext;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public byte[] getContent() {
            return content;
        }
    
        public void setContent(byte[] content) {
            this.content = content;
        }
    
        public String getExt() {
            return ext;
        }
    
        public void setExt(String ext) {
            this.ext = ext;
        }
    
        public String getMd5() {
            return md5;
        }
    
        public void setMd5(String md5) {
            this.md5 = md5;
        }
    
        public String getAuthor() {
            return author;
        }
    
        public void setAuthor(String author) {
            this.author = author;
        }
    }
    
  • saveFileを定義し、実装方法
  • public 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 = FastDFSClient.upload(file);  //upload to fastdfs
            } catch (Exception e) {
                System.out.println("upload file Exception!");
            }
            if (fileAbsolutePath==null) {
                System.out.println("upload file failed,please upload again!");
            }
            String path= FastDFSClient.getTrackerUrl()+fileAbsolutePath[0]+ "/"+fileAbsolutePath[1];
            return path;
        }
  • Test使用MultipartFile
  • @Test
    	public void fdfsUploadTest() throws Exception {
    //		MultipartFile multiFile  = new MockMultipartFile("");
    //		File destFile = new File("....../destFile")
    ////          。
    //		multiFile.transferTo(destFile );
    
    
    		File file = new File("D:/test.jpg");
    		MultipartFile mulFile = new MockMultipartFile(
    				"jielaer.jpg", //   
    				"jielaer.jpg", //originalName                 
    				"application/octet-stream",
    				new FileInputStream(file) //   
    		);
    		String path = fileService.saveFile(mulFile);
    		System.out.println(path);
    		//	ContentType.APPLICATION_OCTET_STREAM.toString(), //    
    	}