1.下载编译
GitHub:https://codeload.github.com/happyfish100
Gitee:https://gitee.com/fastdfs100
如:本文使用gitee做演示
使用命令: git clone 地址 下载 或者直接下限压缩包进行解压
maven编译:mvn clean install
注:如果本地没有安装配置maven可以使用idea自带的进行编译
2.pom.xml
注:这边使用maven进行演示,如果不使用maven可以将编译后的jar导入Java项目,效果一样
引入FastDFS的Maven的依赖包:
<! -- 注:这个依赖没有出现在Maven的中央库中,需要要对源码进行编译将客户端的代码
编译到maven的本地库中或直接拷贝依赖包文件到本地Maven库中 -->
<dependencies>
<dependency>
<groupId>org.csource</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.29-SNAPSHOT</version>
</dependency>
</dependencies>
3.配置
在resources下新建fastdfs.conf:
配置:
#连接超时,单位秒
connect_timeout=10
#网络超时,单位秒
network_timeout=30
#字符集设置
charset=UTF-8
# tracker server 的访问 IP 和 Port。
tracker_server=192.168.154.130:22122
4.编写测试代码
import org.csource.fastdfs.*;
import java.io.IOException;
public class FastDFSUtils {
public static final String CONF_FILENAME = "fastdfs.conf"; //配置文件
public static final String URL = "http://192.168.154.128"; //访问路径
public static final String IMG_PATH = "D:\\Pictures\\9.jpg"; //测试文件上传
public static final String FILE_EXTNAME = "jpg"; //测试扩展名
public static final String DOWNLOAD = "D:\\Pictures\\test.jpg"; //下载
public static void main(String[] args) {
//上传
String[] upload = upload(IMG_PATH, FILE_EXTNAME);
String path = pathSplicing(upload);
System.out.println(path);
//下载
int download = download(upload[0], upload[1], DOWNLOAD);
System.out.println(download == 0 ? "成功" : "失败");
//删除
int delete = delete(upload[0], upload[1]);
System.out.println(delete == 0 ? "成功" : "失败");
}
/**
* 文件删除
* @param groupName 文件组名
* @param filename 文件路径
* @return 返回值:0:成功, 其他:失败
*/
private static int delete(String groupName, String filename) {
StorageClient sc = null;
int result = -1;
try {
//初始化,读取配置文件
ClientGlobal.init(CONF_FILENAME);
TrackerClient tc = new TrackerClient();
TrackerServer ts = tc.getTrackerServer();
StorageServer ss = tc.getStoreStorage(ts);
//操作文件
sc = new StorageClient(ts,ss);
//组名,文件名
result = sc.delete_file(groupName, filename);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(sc!=null){
try {
sc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
/**
* 文件下载
* @param groupName 下载文件组名
* @param image 下载文件路径
* @param downloadPath 保存地址/文件名
* @return 返回值:0:成功, 其他:失败
*/
private static int download(String groupName, String image, String downloadPath) {
StorageClient sc = null;
int result = -1;
try {
//初始化,读取配置文件
ClientGlobal.init(CONF_FILENAME);
TrackerClient tc = new TrackerClient();
TrackerServer ts = tc.getTrackerServer();
StorageServer ss = tc.getStoreStorage(ts);
//操作文件
sc = new StorageClient(ts,ss);
//下载文件组名, 下载文件路径, 保存路径/文件名
result = sc.download_file(groupName, image, downloadPath);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(sc!=null){
try {
sc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
/**
* 文件上传
* @param imgPath 文件路径
* @param fileExtName 文件扩展名
* @return 返回值:[0]:组名, [1]:路径
*/
public static String[] upload(String imgPath, String fileExtName) {
StorageClient sc = null;
String[] result = null;
try {
//初始化,读取配置文件
ClientGlobal.init(CONF_FILENAME);
TrackerClient tc = new TrackerClient();
TrackerServer ts = tc.getTrackerServer();
StorageServer ss = tc.getStoreStorage(ts);
//操作文件
sc = new StorageClient(ts,ss);
//文件绝对路径, 文件扩展名, 属性文件(不做上传),
result = sc.upload_appender_file(imgPath, fileExtName, null);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(sc!=null){
try {
sc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
/**
* 路径拼接
* @param result 数组:[0]:组名, [1]:路径
* @return 文件访问路径
*/
public static String pathSplicing(String [] result) {
String path = "";
try {
if (result != null && result.length > 0) {
StringBuilder url = new StringBuilder();
url.append(URL);
for(String str:result){
url.append("/");
url.append(str);
}
path = url.toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return path;
}
}
注:如果出现超时或者连接问题,检查端口是否开放
开发端口
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --add-port=22122/tcp --permanent
sudo firewall-cmd --add-port=23000/tcp --permanent
重启防火墙
firewall-cmd --reload
说明:
nginx: 80
tracker_server: 22122
trackerd: 23000