자바 클 라 이언 트 작업 FastdFS 파일 업로드 다운로드 교체 삭제 기능 구현

FastdFS 의 저자 인 여 경 씨 는 자바 에 대응 하 는 SDK 를 개발 해 주 셨 습 니 다.여 경 작 가 는 최신 자바 SDK 를 Maven 중앙 창고 로 제때 업데이트 하지 않 았 으 며,현재 중앙 창고 의 최신 판 은 여전히 1.27 판 이다.그래서 우 리 는 Github 을 통 해:https://github.com/happyfish100/fastdfs-client-java 프로젝트 원본 코드 를 다운로드 하고 명령mvn clean install컴 파일 패키지 로 Maven 창 고 를 가 져 와 사용 하면 됩 니 다.

그 다음 에 저 희 는 자바 API 를 통 해 FastdFS 를 조작 하여 파일 의 업로드,다운로드,교체,삭제,메타 데이터 조회,상세 정보 조회 등 기능 을 실현 합 니 다.
글 에서 사례 가 동기 화 되 었 습 니 다.
Github:https://github.com/imrhelloworld/fastdfs-javaGitee:https://gitee.com/imrhelloworld/fastdfs-java
프로젝트 생 성


의존 도 를 높이다
프로젝트 의 pom.xml 에 다음 의존 도 를 추가 합 니 다.우 리 는 상용 공구 꾸러미 와 단원 테스트 가 필요 하기 때문에 그것들 을 도입 해 야 한다.

<!-- fastdfs java client -->
<dependency>
 <groupId>org.csource</groupId>
 <artifactId>fastdfs-client-java</artifactId>
 <version>1.29-SNAPSHOT</version>
</dependency>
<!-- apache commons lang3     -->
<dependency>
 <groupId>org.apache.commons</groupId>
 <artifactId>commons-lang3</artifactId>
 <version>3.11</version>
</dependency>
<!-- junit      -->
<dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>4.13</version>
 <scope>test</scope>
</dependency>
프로필 작성
fdfs_client.conf

#     
connect_timeout = 10
network_timeout = 30
#      
charset = UTF-8
# tracker     HTTP         
http.tracker_http_port = 8080
# tracker      IP    
tracker_server = 192.168.10.101:22122
도구 클래스

package org.example.client;

import org.apache.commons.lang3.StringUtils;
import org.csource.common.MyException;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;

import java.io.*;

/**
 * FastDFS         Java       
 *     :    、  、  、  、       、      
 */
public class FastDFSClient {

 //         
 private static final String CONF_FILENAME = Thread.currentThread()
   .getContextClassLoader().getResource("").getPath() + "fdfs_client.conf";
 // Storage         
 private static StorageClient storageClient = null;

 static {
  try {
   //       
   ClientGlobal.init(CONF_FILENAME);
   //     Tracker    
   TrackerClient trackerClient = new TrackerClient(ClientGlobal.g_tracker_group);
   //     Tracker    
   TrackerServer trackerServer = trackerClient.getTrackerServer();
   //     Storage    
   StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
   //     Storage    
   storageClient = new StorageClient(trackerServer, storageServer);
  } catch (IOException e) {
   e.printStackTrace();
  } catch (MyException e) {
   e.printStackTrace();
  }
 }

 /**
  *     
  *
  * @param inputStream            
  * @param fileName          
  * @return
  */
 public static String[] uploadFile(InputStream inputStream, String fileName) {
  try {
   //       
   byte[] fileBuff = null;
   //      
   NameValuePair[] metaList = null;
   if (inputStream != null) {
    //        
    int len = inputStream.available();
    //         
    metaList = new NameValuePair[2];
    //       ,       
    metaList[0] = new NameValuePair("file_name", fileName);
    //       ,     
    metaList[1] = new NameValuePair("file_length", String.valueOf(len));
    //            
    fileBuff = new byte[len];
    //           ,       
    inputStream.read(fileBuff);
   }
   /*
        。
        :         (        ),        (   ),   
    */
   String[] fileids = storageClient.upload_file(fileBuff, getFileExt(fileName), metaList);
   return fileids;
  } catch (IOException e) {
   e.printStackTrace();
  } catch (MyException e) {
   e.printStackTrace();
  }
  return null;
 }

 /**
  *     
  *
  * @param file       
  * @param fileName          
  * @return
  */
 public static String[] uploadFile(File file, String fileName) {
  try (FileInputStream fis = new FileInputStream(file)) {
   return uploadFile(fis, fileName);
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return null;
 }

 /**
  *        (   )
  *
  * @param fileName
  * @return  :"jpg" or ""
  */
 private static String getFileExt(String fileName) {
  if (StringUtils.isBlank(fileName) || !fileName.contains(".")) {
   return "";
  }
  return fileName.substring(fileName.lastIndexOf(".") + 1); //       
 }

 /**
  *       
  *
  * @param groupName   /  ,   :group1
  * @param remoteFileName    ,  :"M00/00/00/wKgKZl9tkTCAJAanAADhaCZ_RF0495.jpg"
  * @return     
  */
 public static FileInfo getFileInfo(String groupName, String remoteFileName) {
  try {
   return storageClient.get_file_info(groupName == null ? "group1" : groupName, remoteFileName);
  } catch (IOException e) {
   e.printStackTrace();
  } catch (MyException e) {
   e.printStackTrace();
  }
  return null;
 }

 /**
  *      
  *
  * @param groupName   /  ,   :group1
  * @param remoteFileName    ,  :"M00/00/00/wKgKZl9tkTCAJAanAADhaCZ_RF0495.jpg"
  * @return         
  */
 public static NameValuePair[] getMetaData(String groupName, String remoteFileName) {
  try {
   //            Storage              
   return storageClient.get_metadata(groupName == null ? "group1" : groupName, remoteFileName);
  } catch (IOException e) {
   e.printStackTrace();
  } catch (MyException e) {
   e.printStackTrace();
  }
  return null;
 }

 /**
  *     
  *
  * @param groupName   /  ,   :group1
  * @param remoteFileName    ,  :"M00/00/00/wKgKZl9tkTCAJAanAADhaCZ_RF0495.jpg"
  * @return         
  */
 public static InputStream downloadFile(String groupName, String remoteFileName) {
  try {
   //            Storage             
   byte[] bytes = storageClient.download_file(groupName == null ? "group1" : groupName, remoteFileName);
   //        
   InputStream inputStream = new ByteArrayInputStream(bytes);
   return inputStream;
  } catch (IOException e) {
   e.printStackTrace();
  } catch (MyException e) {
   e.printStackTrace();
  }
  return null;
 }

 /**
  *     
  *
  * @param groupName   /  ,   :group1
  * @param remoteFileName    ,  :"M00/00/00/wKgKZl9tkTCAJAanAADhaCZ_RF0495.jpg"
  * @return 0   , 0   
  */
 public static int deleteFile(String groupName, String remoteFileName) {
  int result = -1;
  try {
   //            Storage        
   result = storageClient.delete_file(groupName == null ? "group1" : groupName, remoteFileName);
  } catch (IOException e) {
   e.printStackTrace();
  } catch (MyException e) {
   e.printStackTrace();
  }
  return result;
 }

 /**
  *            
  *
  * @param oldGroupName    
  * @param oldFileName     
  * @param file      
  * @param fileName      
  * @return
  */
 public static String[] modifyFile(String oldGroupName, String oldFileName, File file, String fileName) {
  //    
  String[] fileids = uploadFile(file, fileName);
  if (fileids == null) {
   return null;
  }
  //    
  int delResult = deleteFile(oldGroupName, oldFileName);
  if (delResult != 0) {
   return null;
  }
  return fileids;
 }

}
테스트
파일 업로드

//     
@Test
public void testUploadFile() {
 String[] fileids = FastDFSClient.uploadFile(new File("D:/china.jpg"), "china.jpg");
 for (String fileid : fileids) {
  System.out.println("fileid = " + fileid);
 }
}
반환 값

fileid = group1
fileid = M00/00/00/wKgKZl9xMdiAcOLdAADhaCZ_RF0096.jpg
문서 의 상세 한 상황.

//       
@Test
public void testGetFileInfo() {
 FileInfo fileInfo = FastDFSClient.getFileInfo("group1", "M00/00/00/wKgKZl9xMdiAcOLdAADhaCZ_RF0096.jpg");
 System.out.println("fileInfo = " + fileInfo);
}
반환 값:

fileInfo = fetch_from_server = false, file_type = 1, source_ip_addr = 192.168.10.102, file_size = 57704, create_timestamp = 2020-09-28 08:44:08, crc32 = 645874781
파일 메타 데이터

//       
@Test
public void testGetMetaData() {
 NameValuePair[] metaDatas = FastDFSClient.getMetaData("group1", "M00/00/00/wKgKZl9xMdiAcOLdAADhaCZ_RF0096.jpg");
 for (NameValuePair metaData : metaDatas) {
  System.out.println(metaData.getName() + "---" + metaData.getValue());
 }
}
반환 값:

file_length---57704
file_name---china.jpg
파일 다운로드

//     
@Test
public void testDownloadFile() {
 InputStream is = FastDFSClient.downloadFile("group1", "M00/00/00/wKgKZl9xMdiAcOLdAADhaCZ_RF0096.jpg");
 try (FileOutputStream fos = new FileOutputStream("D:/wKgKZl9xMdiAcOLdAADhaCZ_RF0096.jpg")) {
  int len = 0;
  byte[] bytes = new byte[1024];
  while ((len = is.read(bytes)) != -1) {
   fos.write(bytes, 0, len);
   fos.flush();
  }
 } catch (FileNotFoundException e) {
  e.printStackTrace();
 } catch (IOException e) {
  e.printStackTrace();
 }
}
파일 삭제

//     
@Test
public void testDeleteFile() {
 int result = FastDFSClient.deleteFile("group1", "M00/00/00/wKgKZl9xMdiAcOLdAADhaCZ_RF0096.jpg");
 System.out.println("result = " + result);
}
반환 값:

result = 0
파일 교체

//     
@Test
public void testModifyFile() {
 String[] fileids = FastDFSClient.modifyFile("group1", "M00/00/00/wKgKZl9xOS2ASdu8AADhaCZ_RF0898.jpg",
            new File("D:/mhw.jpg"), "mhw.jpg");
 for (String fileid : fileids) {
  System.out.println("fileid = " + fileid);
 }
}
반환 값:

fileid = group1
fileid = M00/00/00/wKgKZl9xOeaAFO00AACmo7QBGtA298.jpg
이로써 자바 클 라 이언 트 는 FastDFS 를 조작 하여 파일 업로드 와 다운로드 교체,삭제 등 을 실현 합 니 다.다음 편 은 FastDFS 의 클 러 스 터 환경 을 구축 하고 다 중 Tracker 다 중 Storage 를 구축 한 다음 에 Nginx 대 리 를 통 해 이 루어 집 니 다.
자바 클 라 이언 트 가 FastdFS 를 조작 하여 파일 업로드 교체 삭제 기능 을 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 파일 업로드 다운로드 교체 삭제 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!

좋은 웹페이지 즐겨찾기