nginx集成FastDFS

ginkgodia 2016-03-23

一、前期准备

安装nginx和FastDFS,并保证能正常运行。

下载nginx和FastDFS的集成模块,fsatdfs-nginx-module_v1.16.tar.gz,存放到/usr/local/FastDFS目录下,并执行tar–zxvffsatdfs-nginx-module_v1.16.tar.gz解压.

二、集成

进入/usr/local/hjlc_file/nginx-1.6.2(这是nginx的源码路径,不是nginx的安装路径),执行configure进行配置,命令如下:

./configure --with-pcre=/usr/local/hjlc_file/pcre-8.38 --with-zlib=/usr/local/hjlc_file/zlib-1.2.7  --with-openssl=/usr/local/hjlc_file/ openssl-1.0.0a  --add-module=/usr/local/FastDFS/fastdfs-nginx-module/src

上述命令成功执行后,再执行make进行编译(注意:这里不需要覆盖安装,不要执行makeinstall),编译过后,将源码目录中objs目录下的nginx复制到nginx安装目录的sbin下即可。

然后将fastdfs-nginx-module模块的src目录下的mod_fastdfs.conf文件复制到/etc/fdfs/目录下。

三、配置

配置mod_fastdfs.conf,修改以下信息:

#保存日志目录

base_path=/usr/local/FastDFS/logs

#tracker服务器的IP地址以及端口号

tracker_server=172.18.8.35:22122

#storage服务器的端口号

storage_server_port=23000

#文件url中是否有group名

url_have_group_name=true

#存储路径个数,需要和store_path个数匹配

store_path_count=1

#存储路径,多个路径用1,2,3..来区分如store_path1,store_path2,store_path3

store_path0=/usr/local/fast_dfs_storage

配置好后,重启nginx和FastDFS。

配置/usr/local/nginx/conf/nginx.conf,通过url,将请求转到FastDFS的存储目录,

server {
         listen 13110;
	server_name 127.0.0.1;
	charset utf-8;
          location ~.*/M00    {
          root /usr/local/fast_dfs_storage/data/;
          ngx_fastdfs_module;
        }
     }

增加一个server节点,监听13110端口,FastDFS返回url格式为group1/M00/00/00/xxxx,location~.*/M00就是配置当遇到FastDFS请求时,访问存储目录。

四、java客户端开发

下载FastDFS的java客户端jar包fastdfs_client_v1.20.jar。

在项目中增加fdfs_client.conf配置文件,内容如下:

connect_timeout=2

network_timeout=30

charset=UTF-8

http.tracker_http_port=80

http.anti_steal_token=no

tracker_server=172.18.8.35:22122

Java代码:

//初始化(通过文件),忽略异常处理
  String url = getClass().getResource("/fdfs_client.conf").getFile();
url = java.net.URLDecoder.decode(url,"utf-8");
ClientGlobal.init(url);

也可以通过自己设置参数来初始化,代码如下:
//初始化(手动初始化参数)
ClientGlobal.setG_connect_timeout(3000);
ClientGlobal.setG_charset(“UTF-8”);
ClientGlobal.setG_network_timeout(30000);
ClientGlobal.setG_tracker_http_port(80);
ClientGlobal.setG_anti_steal_token(false);
InetSocketAddress[] group = new InetSocketAddress[1];
group[i] = new InetSocketAddress(“172.18.8.35”,22122);
ClientGlobal.setG_tracker_group(new TrackerGroup(group));


  //上传,忽略异常处理
  String url = "";
  TrackerClient trackerClient = new TrackerClient(); 
  TrackerServer trackerServer = null;
  FileInputStream fis = null;
trackerServer = trackerClient.getConnection();
StorageServer storageServer = null;
StorageClient client = new StorageClient(trackerServer, storageServer);
fis = new FileInputStream(file);
byte[] file_buff = null;
if(fis != null){
int len;
	len = fis.available();
	file_buff = new byte[len];
	fis.read(file_buff);
}
String[] result = null;
result = client.upload_file(file_buff, FilenameUtils.getExtension(file.getName()), null);
  result为返回的参数result[0]为分组名,如group1,result[1]为目录地址:如/M00/00/00/XXXX
 
  //删除,忽略异常处理
TrackerClient trackerClient = new TrackerClient(); 
  TrackerServer trackerServer = null;
trackerServer = trackerClient.getConnection();
StorageServer storageServer = null;  
  StorageClient1 client = new StorageClient1(trackerServer, storageServer);
if(url.indexOf("/") == 0)
  {
      url = url.substring(1);
  }
  client.delete_file1(url);

相关推荐

huhuhuemail / 0评论 2019-02-16