이 기사에서는 Spring Boot를 사용하여 파일을 분산 파일 시스템 FASTDF에 업로드하는 방법에 대해 설명합니다.
이 프로젝트는 이전 프로젝트를 기반으로 구축 될 것입니다.
1. POM 패키지 구성
Spring Boot의 최신 버전 1.5.9, JDK는 1.8, Tomcat8.0을 사용합니다.
<pectionency> <groupid> org.csource </groupid> <artifactid> FastDFS-Client-Java </artifactid> <bersion> 1.27-SnapShot </version> </fectionency>
FASTDFS 관련 API를 호출하려면 FastDFS-Client-Java 패키지를 추가했습니다.
2. 구성 파일
리소스 디렉토리에 fdfs_client.conf 파일을 추가하십시오
Connect_Timeout = 60network_timeout = 60charset = 60chttp.tracker_http_port = 8080http.anti_steal_token = nohttp.secret_key = 123456tracker_server = 192.168.53.85:2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212.
구성 파일은 연결 시간 초과 시간, 인코딩 형식, Tracker_Server 주소 및 기타 정보를 설정합니다.
자세한 내용 참조 : FASTDFS-CLIENT-JAVA
3. FastDFS 업로드 도구 클래스를 캡슐화하십시오
FASTDFSFILE 캡슐화 및 기본 파일 정보에는 파일 이름, 내용, 파일 유형, 저자 등이 포함됩니다.
공개 클래스 FASTDFSFILE {개인 문자열 이름; 개인 바이트 [] 컨텐츠; 개인 문자열 내선; 개인 문자열 md5; 개인 문자열 저자; // getter and setter를 생략합니다업로드, 다운로드 및 삭제와 같은 일반적으로 사용되는 방법을 포함하여 FastDFSclient 클래스를 캡슐화하십시오.
먼저, 클래스가로드 될 때 해당 구성 정보를 읽고 초기화하십시오.
static {try {String {String FilePath = New ClassPathResource ( "fdfs_client.conf"). getFile (). getAbsolutePath () ;; ClientGlobal.init (FilePath); 트래커 클리어 = 새로운 트래커 클리어 (); TrackerServer = TrackerClient.getConnection (); StoragesErver = TrackerClient.getStorestorage (Trackerserver); } catch (예외 e) {logger.error ( "FastDfs Client Init Off!", E); }}파일 업로드
public static string [] upload (fastdfsfile 파일) {logger.info ( "파일 이름 :" + file.getName () + "파일 길이 :" + file.getContent (). length); namevaluepair [] meta_list = new NameValuePair [1]; meta_list [0] = 새 이름 ValuePair ( "author", file.getAuthor ()); Long StartTime = System.CurrentTimeMillis (); 문자열 [] uploadResults = null; try {storageclient = new StorageClient (Trackerserver, StoragesErver); uploadResults = storageclient.upload_file (file.getContent (), file.getext (), meta_list); } catch (ioexception e) {logger.error ( "io 예외 파일을 업로드 할 때 :" + file.getName (), e); } catch (예외 e) {logger.error ( "비 IO 예외 파일을 업로드 할 때 :" + file.getName (), e); } logger.info ( "upload_file time 사용 :" + (System.currentTimeMillis () -StartTime) + "MS"); if (uploadResults == null) {logger.error ( "파일 실패, 오류 코드 :" + storageClient.getErrorCode ()); } string groupName = uploadResults [0]; 문자열 remoteFilename = uploadResults [1]; logger.info ( "파일 업로드 성공 !!!" + "Group_Name :" + groupName + ", RemoteFileName :" + "" + remoteFilename); 업로드 리턴 리턴 리턴;}FASTDFS에서 제공 한 클라이언트 StorageClient를 사용하여 파일을 업로드하고 업로드 결과를 반환하십시오.
GroupName 및 파일 이름을 기반으로 파일 정보를 얻습니다.
public static fileInfo getFile (String groupName, String impliceFilename) {try {storageClient = new StorageClient (Trackerserver, StoragesErver); return storageclient.get_file_info (groupname, ormotefilename); } catch (ioexception e) {logger.error ( "io 예외 : 빠른 dfs 실패에서 파일 가져옵니다", e); } catch (예외 e) {logger.error ( "비 IO 예외 : 빠른 DFS에서 파일 가져 오기", e); } return null;}파일을 다운로드하십시오
public static inputStream downfile (String groupName, String impliceFilename) {try {storageClient = new StorageClient (Trackerserver, StoragesErver); BYTE [] fileByte = storageClient.Download_File (GroupName, RemoteFilename); inputStream ins = 새로운 BytearRayInputStream (FileByte); 반환 INS; } catch (ioexception e) {logger.error ( "io 예외 : 빠른 dfs 실패에서 파일 가져옵니다", e); } catch (예외 e) {logger.error ( "비 IO 예외 : 빠른 DFS에서 파일 가져 오기", e); } return null;}파일 삭제
public static void deletefile (String groupname, String implefilename) 예외 {storageclient = new StorageClient (Trackerserver, StoragesErver); int i = storageclient.delete_file (groupName, RemoteFilename); logger.info ( "파일 삭제 성공 !!!" + i);}FASTDF를 사용할 때는 해당 FastDFSclient의 해당 방법을 호출하십시오.
4. 업로드 제어 클래스를 쓰십시오
MultipartFile에서 파일 정보를 읽고 FastDFSClient를 사용하여 FASTDFS 클러스터에 파일을 업로드하십시오.
public string savefile (multipartfile multipartfile)은 ioexception {string [] fileabsolutepath = {}; 문자열 filename = multipartfile.getoriginalfilename (); 문자열 ext = filename.substring (filename.lastindexof ( ".") + 1); 바이트 [] file_buff = null; inputStream inputStream = multipartFile.getInputStream (); if (inputStream! = null) {int len1 = inputStream.available (); file_buff = 새로운 바이트 [len1]; inputStream.read (file_buff); } inputStream.close (); FASTDFSFILE 파일 = 새로운 FASTDFSFILE (filename, file_buff, ext); try {fileabsolutepath = fastdfsclient.upload (file); // FASTDFS에 업로드} catch (예외 e) {logger.error ( "파일 예외 업로드!", e); } if (fileabsolutepath == null) {logger.error ( "파일 업로드 실패, 다시 업로드하십시오!"); } 문자열 path = fastdfsclient.getTrackerUrl ()+fileAbsolutePath [0]+"/"+fileAbsolutePath [1]; 반환 경로;}요청 제어, 위의 메소드 SaveFile ()을 호출하십시오.
@postmapping ( "/upload") // 4.3public string singlefileupload (@requestparam ( "file") multipartfile 파일, redirectattributes redirectattributes) {if (file.isempty ()) {redirectattributes.addflashattribute ( "메시지"를 선택하십시오 "). "리디렉션 : 업로드 스타 우스"를 반환합니다. } 시도 {// 파일을 가져 와서 String Path = SaveFile (파일)에 저장합니다. RedirectAttributes.AddFlashAttribute ( "메시지", "성공적으로 업로드 된 '" + file.getoriginalFilename () + "'"); REDIRECTATTRIBUTES.ADDFLASHATTRIBUTE ( "Path", "File Path URL '" + PATH + "'"); } catch (예외 e) {logger.error ( "파일 업로드 실패", e); } "리디렉션 :/uploadstatus";} 반환업로드가 성공하면 페이지에 파일 경로를 표시하면 렌더링은 다음과 같습니다.
브라우저 에서이 URL을 방문하면 FASTDF를 통해 성공적으로 표시되는 것을 알 수 있습니다.
이것은 FASTDF를 통합하기 위해 Spring Boot를 사용하여 수행됩니다.
샘플 코드 -github
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.