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