搭建一个自己的文件上传服务器
由于看到了商城的项目,本来无心搭建那个文件上传服务器的,可是看到了人家自己使用了FastDFS服务器,我想自己怎么不能搭建呢,干就是了。
先介绍下为何使用这个东西:
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。
特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS服务端主要有:跟踪器(tracker)群和存储节点(storage),跟踪器做调度工作,在访问上起负载均衡的作用,
跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。
其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
上传交互过程编辑
1. client询问tracker上传到的storage,不需要附加参数;
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件上传。
下载交互过程编辑
1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件下载。
需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。
那么如何安装使用呢:
················1.gcc环境
2.FastDFS依赖libevent库,需要安装:sudo apt-get install libevent
3.libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。
将libfastcommonV1.0.7.tar.gz拷贝至/usr/local/下
cd /usr/local
tar -zxvf libfastcommonV1.0.7.tar.gz
cd libfastcommon-1.0.7
./make.sh
./make.sh install(下一步*重要)
同时要注意:libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下
4.将FastDFS_v5.05.tar.gz拷贝至/usr/local/下
tar -zxvf FastDFS_v5.05.tar.gz
cd FastDFS
./make.sh
./make.sh install 安装成功将安装目录下的conf下的文件拷贝到/etc/fdfs/下。
5.配置tracker:
拷贝一份新的tracker配置文件:
cp tracker.conf.sample tracker.conf
修改tracker.conf
vi tracker.conf
base_path=/home/yuqing/FastDFS
改为:
base_path=/home/FastDFS
启动:tracker:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
6.配置存储的仓库:
拷贝一份新的storage配置文件:
cp storage.conf.sample storage.conf
修改storage.conf
vi storage.conf
group_name=group1
base_path=/home/yuqing/FastDFS改为:base_path=/home/FastDFS
store_path0=/home/yuqing/FastDFS改为:store_path0=/home/FastDFS/fdfs_storage
#如果有多个挂载磁盘则定义多个store_path,如下
#store_path1=…..
#store_path2=……
tracker_server=192.168.101.3:22122 #配置tracker服务器:IP
#如果有多个则配置多个tracker
tracker_server=192.168.101.4:22122
启动仓库:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
7.配置开机自启:
在vim /etc/rc.local加入
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
这不是集群的使用方式那么该如何在代码中使用呢求那个看下面代码:
先把fastdfs_client的客户端jar包依赖加入maven中:
@Test
public void testUpload() throws Exception, MyException {
//trackerserver的服务器端口号为22122
//创建一个配置文件,文件名任意,内容就是tracker服务器的地址
//使用全局对象加载配置文件(必须是*对路径)
ClientGlobal.init(“F:\\Java\\javaEE/e3-manager-web/src/main/resources/conf/client.conf”);
//创建一个TrackerClient对象
TrackerClient trackerClient=new TrackerClient();
//通过TrackerClient获得TrackerServer对象
TrackerServer trackerServer=trackerClient.getConnection();
//创建一个引用的StorageServer的引用可以为null
StorageServer storageServer=null;
//创建一个StoreageClient参数需要TrackerServer和StorageServer
StorageClient storageClient=new StorageClient(trackerServer,storageServer);
//使用StorageClient上传文件(必须为*对路径)
String[] upload_file = storageClient.upload_file(“/.jpg”,”jpg”, null);
for(String string :upload_file) {
System.out.println(string);
}
}
private
/**
* 用工具类的方式测试
* @throws Exception
*/
public void testFastDfsClient() throws Exception {
FastDFSClient fastDFSClient=new FastDFSClient(“F:\\Java\\javaEE/e3-manager-web/src/main/resources/conf/client.conf”);
String string=fastDFSClient.uploadFile(“.jpg”);
System.out.println(string);
}
使用工具类上传,需要建立文件夹,然后通过文件的使用需要配置value()
/**
* 图片上传的
* @author leoill
*TODO
*2019年1月6日
*/
@Controller
public class PictureController {
@Value(“IMAGE_SERVER”)
private String IMAGE_URL;
@RequestMapping(“/pic/upload”)
@ResponseBody
public String uploadFile(MultipartFile uploadFile){
//返回String对象时直接返回的是contentType=”text/plain”
//把图片上传到服务器
try {
FastDFSClient fastDFSClient=new FastDFSClient(“classpath:conf/client.conf”);
//取出扩展名
String originalFilename = uploadFile.getOriginalFilename();
//originalFilename.substring(originalFilename.lastIndexOf(“.”)+1)
//返回一个图片的地址和文件名
String url = fastDFSClient.uploadFile(uploadFile.getBytes(), originalFilename.substring(originalFilename.lastIndexOf(“.”)+1));
//补充完整的URL
url=IMAGE_URL+url;
//封装到map
Map<String, Object> map=new HashMap<>();
map.put(“error”, 0);
map.put(“url”, url);
return JsonUtils.objectToJson(map);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Map<String, Object> map=new HashMap<>();
map.put(“error”, 1);
map.put(“message”, “图片上传失败”);
return JsonUtils.objectToJson(map);
}
使用前必须搭建这个服务,通过加载配置文件,把其中的数据给加载进去。
以上就是fastDFS的搭建过程了,搭建过程感觉有坑,但是也在填坑。集群的方式搭建就看后来的文章吧,今天就到这里了。不明白的可以私信我。