자바 클 라 이언 트 작업 FastdFS 파일 업로드 다운로드 교체 삭제 기능 구현
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 를 조작 하여 파일 업로드 교체 삭제 기능 을 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 파일 업로드 다운로드 교체 삭제 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.