1、首先确定环境是否已经具有了基本的gcc等,可使用如下将基本编译环境构建好
yum install gcc libevent libevent-devel -y
2、通过下面语句获取到libfastcommon等相关包,若在centos7中不好使,则直接复制下方链接即可在浏览器中进行下载,之后将包上传到centos7中即可,我用的xftp来进行传输。
获取libfastcommon包:wget https://github.com/happyfish100/libfastcommon/archive/V1.0.38.tar.gz
获取fastdfs包: wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
若不好使:可通过 链接:https://pan.baidu.com/s/1keVe1-h8d4QXN3gbUnSy2g
提取码:q6tv
移动到一个合适的位置:
之后进行解压:可以使用 注( mv 文件名称 想要的名称) ,这个命令修改文件名称
进入文件夹
执行 ./make.sh
./make.sh install
得到如下:
针对另一个fastdfs包同样如上述般操作
tar -zxvf 包名
进入文件夹:./make.sh
./make.sh install
之后在etc/fdfs文件夹会有几个文件如下:
其中需要对client、storage.conf.sampel、tracker.conf.sample进行一些修改,而client.conf.sample主要是针对一些前期测试之用
接下来对tracker.conf.sample进行修改,首先去除sample后缀得到tracker.conf文件,进行下图所示修改
接下来进行修改storage.conf文件
1.
2.
修改完成后进行下一步操作
1.执行命令:fdfs_trackerd /etc/fdfs/tracker.conf ,若出现报错一般情况下,可能是conf配置的路径的文件夹并未创建,所以进行创建即可
2.执行命令 netstat -unltp | grep fdfs查看tracker是否启动,可以看到22122端口的tracker服务已启动
3.执行fdfs_storaged /etc/fdfs/storage.conf,且执行查看端口服务情况,可以看到已经成功启动
4.[若已经启动则不用再使用该命令,这只是一个另一个开启的方式]当然其还有其他方式启动相应storage的服务,比如下方可以看到 /etc/init.d文件夹有含有相应的脚本指令,故而可以执行 /etc/init.d/fdfs_storaged start进行启动
5.待成功启动服务后,可以看到在方才设置的文件夹路径(如/opt/fastdfs/files ) 下已经生成了相应的文件data文件
打开files下的data文件可以看到自动生成了如下文件夹:
6.现在进行测试一下,当然首先需要修改一下client.conf
7.将client.conf文件修改完成后就可以开始测试了,首先随便在一个什么位置,使用vim新建一个testa.txt文件,随便写点什么
之后执行fdfs_test /etc/fdfs/client.conf upload testa.txt 不报错的情况,可有下方,更多的信息如group 及 M00 、url路径这些信息在这里便没有展示,如报错,则可能是端口23000 于22122未开放,则进行开放端口即可
若是阿里云服务器的话,在本地开放之后还需在阿里云的ecs控制台网站设置相应的安全组,在其中同样的将端口进行开放即可
**************************************
1.结束服务的话,使用kill -9 进程号 也可 ,当然最好的还是用
tracker : fdfs_trackerd /etc/fdfs/tracker.conf stop
storage : fdfs_storaged /etc/fdfs/storage.conf stop
2.进行查看上传的文件内容,在上传成功后便会生成一堆信息,包含了group_name等信息,需要知道文件名上传后会自动生成新的名称,下方是我的文件名称
下载文件:fdfs_test /etc/fdfs/client.conf download group1(组名group_name) (远程文件名remote_filename) M00/00/00/rBGmz2BOuMiAEfXcAAAAJLEbqVI542.txt
**************************************************************
配置nginx
1.获取nginx包,及fastdfs-nginx-module包
2.进入fastdfs-nginx-module解压后的文件夹中,使用pwd获取文件夹路径
3.进入nginx文件夹中可看到configure,如果想稳妥一点安装的话最好使用 fastdfs-nginx-module版本为1.20之前的,不然似乎会出现一些错误,虽然也能解决,但还是选择稳妥的好
使用该命令: ./configure --prefix=/usr/local/nginx_fdfs --add-module=/usr/local/fastdfs/fastdfs-nginx-module-master/src
其中prefix是指定nginx安装路径,-add-module则是添加模块指定了fastdfs-nginx-module包及src的路径
4.当 ./configure..................... 编译完成后,
使用 : make install
完成后可以进入 cd /usr/local下可以看到已经出现了一个nginx_fdfs文件夹
5.进入之前的fastdfs-nginx-module文件夹下,编辑mod_fastdfs.conf
修改mod_fastdfs.conf
注意 1.修改路径时,nginx_mod这个是新创建的文件夹,需要自己创建即可,图片已有序号
到此mod_fastdfs.conf的配置ok。
6.将mod_fastdfs.conf 文件上传到 /etc/fdfs下,即和之前配置fastdfs时tracker.conf等一样的位置
7.如同使用nginx与tomcat时候一样nginx的配置文件也需要做出一些配置,进入新生成的 nginx_fdfs 文件夹中的conf文件夹,编辑nginx.conf
进行配置nginx.conf 如下图,可以看出group 与 M0 都是熟悉的面孔
8.待一切ok,执行如下:
可以看到nginx:master 与 nginx:worker 都启动了
9.测试访问:
(1)使用vim新建一个文件,起名 anew.txt
(2)测试上传,使用命令fdfs_test /etc/fdfs/client.conf upload anew.txt 上传
(3)访问链接:可以看到成功访问了该文件
10.可能出现的错误,在启动nginx的时候未曾启动 nginx : worker
这种情况的话就就去打开 nginx的log文件夹里面查看一下 error.log具体问题具体分析,我这里之前出现的问题是fastdfs-5.11这个文件下conf中的两个文件 http.conf,mime.types找不到,所以可以将这个两个文件移动到 /etc/fdfs 中与之前的 tracker.conf等处于同一个文件夹,之后再执行启动nginx即可
**********************************************************
1.关闭所有nginx进程: killall -9 nginx
2.查看进程号,ps -ef | grep nginx
3.启动nginx,进入nginx/sbin下 : ./nginx 即可
********************************************************
在java工程下使用fastdfs上传,下载,及删除操作
1.新建一个以maven创建的java工程,在pom.xml下引入如下依赖
2.在resource中新建一个fasdfs.properties写入如下自己的服务器ip地址,端口为22122,
3.写java代码:
public class FastDFSUtil {
public static void main(String[] args) throws IOException, MyException
{
//upload(); //上传文件
// download(); //下载文件
delfile(); //删除文件
}
public static void upload() throws IOException, MyException
{ //读取配置文件
ClientGlobal.init("other-config.properties");
TrackerClient tc = new TrackerClient();
TrackerServer ts = tc.getConnection();
StorageServer ss = tc.getStoreStorage(ts);
//定义Storage的客户端对象,需要使用这个对象来完成具体的的文件上传,下载和删除操作
StorageClient sc = new StorageClient();
//文件上传
//参数1:为需要上传的文件的绝对路径
//参数2:为需要上传的文件的扩展名
//参数3:为文件的属性文件通常不上传
//返回一个String数组,这个重要,建议存入数据库包含 group1和文件名称
String[] result = sc.upload_file("D:/photos/testa.jpg","jpg", null);
for(String str:result)
{
System.out.println(str);
}
ss.close();
ts.close();
}
/*
* 下载
*/
public static void download() throws IOException, MyException {
//读取配置文件
ClientGlobal.init("other-config.properties");
TrackerClient tc = new TrackerClient();
TrackerServer ts = tc.getConnection();
StorageServer ss = tc.getStoreStorage(ts);
//定义Storage的客户端对象,需要使用这个对象来完成具体的的文件上传,下载和删除操作
//
StorageClient sc = new StorageClient();
//文件下载
//返回0表示文件下载成功
int res = sc.download_file("group1","M00/00/00/rBGmz2BTMR-ADA-5AAIIAHyF9Us835.jpg","D:/photos/loada.jpg");
System.out.println(res);
ss.close();
ts.close();
}
//文件删除
public static void delfile() throws IOException, MyException {
//读取配置文件
ClientGlobal.init("other-config.properties");
TrackerClient tc = new TrackerClient();
TrackerServer ts = tc.getConnection();
StorageServer ss = tc.getStoreStorage(ts);
//定义Storage的客户端对象,需要使用这个对象来完成具体的的文件上传,下载和删除操作
//
StorageClient sc = new StorageClient();
//删除文件
//0表示删除成功
int res = sc.delete_file("group1","M00/00/00/rBGmz2BTMR-ADA-
5AAIIAHyF9Us835.jpg");
System.out.println("删除成功0 : "+res);
ss.close();
ts.close();
}
}