fastDFS+nginx搭建图片服务器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013305783/article/details/80875324

一、简介

   FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

二、搭建

   需要搭建两个模块,一个Tracker、一个Storage服务。

1、搭建步骤

   第一步:把fastDFS压缩文件下载到指定目录。

   第二步:安装FastDFS之前,先安装libevent工具包。apt-get install libevent-dev

   第三步:安装libfastcommonV1.0.7工具包。

    1、解压缩
    2、./make.sh
    3、./make.sh install
    4、把/usr/lib64/libfastcommon.so文件向/usr/lib/下复制一份


   第四步:安装Tracker服务。

    1、解压缩
    2、./make.sh
    3、./make.sh install

安装后在/usr/bin/目录下有以fdfs开头的文件都是编译出来的。配置文件都放到/etc/fdfs文件夹

    4、把安装解压编译后的fastdfs的conf目录下的所有的配置文件都复制到/etc/fdfs下。
    5、配置tracker服务。修改/etc/fdfs/tracker.conf文件。
    6、启动tracker。/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
        重启使用命令:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

配置文件修改如下


这里写图片描述


   第五步:安装storage服务。

    1、如果是在不同的服务器安装,第四步的1~4需要重新执行。
    2、配置storage服务。修改/etc/fdfs/storage.conf文件
    3、启动storage服务。/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

这里写图片描述

这里写图片描述

这里写图片描述

   第六步:测试服务。

    1、修改配置文件/etc/fdfs/client.conf
    2、测试/usr/bin/fdfs_test /etc/fdfs/client.conf upload anti-steal.jpg


这里写图片描述

   修改base_path后面的路径和tracker_server后面指定tracker地址


   第七步:搭建nginx提供http服务。

   可以使用官方提供的nginx插件。要使用nginx插件需要重新编译。
fastdfs-nginx-module_v1.16.tar.gz

1、解压插件压缩包
2、修改解压目录下/fastdfs-nginx-module/src/config文件,把其中的local去掉。


这里写图片描述

3、对nginx重新config

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/home/scp/fastdfs-nginx-module/src

4、make
5、make install
6、把解压目录下的/fastdfs-nginx-module/src/mod_fastdfs.conf文件复制到/etc/fdfs目录下。编辑:

修改日志路径

这里写图片描述

指定tracker

这里写图片描述

这里写图片描述

图片保存路径

这里写图片描述

7、nginx的配置在nginx的配置文件中添加一个Server:

server {
        listen       80;
        server_name  192.168.101.3;

        location /group1/M00/{
                #root /home/FastDFS/fdfs_storage/data;
                ngx_fastdfs_module;
        }
}

8、将libfdfsclient.so拷贝至/usr/lib下cp /usr/lib64/libfdfsclient.so /usr/lib/
9、启动nginx

三、Java中使用


   官方提供一个jar包使用方法:

    1、把FastDFS提供的jar包添加到工程中
    2、初始化全局配置。加载一个配置文件。
    3、创建一个TrackerClient对象。
    4、创建一个TrackerServer对象。
    5、声明一个StorageServer对象,null。
    6、获得StorageClient对象。
    7、直接调用StorageClient对象方法上传文件即可。

public void testUpload() throws Exception {
        // 1、把FastDFS提供的jar包添加到工程中
        // 2、初始化全局配置。加载一个配置文件。
        ClientGlobal.init("配置文件路径,指定tracker_server=192.168.25.133:22122");
        // 3、创建一个TrackerClient对象。
        TrackerClient trackerClient = new TrackerClient();
        // 4、创建一个TrackerServer对象。
        TrackerServer trackerServer = trackerClient.getConnection();
        // 5、声明一个StorageServer对象,null。
        StorageServer storageServer = null;
        // 6、获得StorageClient对象。
        StorageClient storageClient = new StorageClient(trackerServer, storageServer);
        // 7、直接调用StorageClient对象方法上传文件即可。
        String[] strings = storageClient.upload_file("图片路径", "jpg", null);
        for (String string : strings) {
            System.out.println(string);
        }
    }

pom中引入

     <dependency>
          <groupId>org.csource</groupId>
          <artifactId>fastdfs-client-java</artifactId>
          <version>5.0.5</version>
        </dependency>

使用工具类上传图片

public void testFastDfsClient() throws Exception {
        FastDFSClient client = new FastDFSClient("配置文件路径");
        String uploadFile = client.uploadFile("图片路径", "jpg");
        System.out.println(uploadFile);
        }

FastDFSClient 类如下

public class FastDFSClient {

    private TrackerClient trackerClient = null;
    private TrackerServer trackerServer = null;
    private StorageServer storageServer = null;
    private StorageClient1 storageClient = null;

    public FastDFSClient(String conf) throws Exception {

       if (conf.contains("classpath:")) {
            conf=conf.replace("classpath:", this.getClass().getResource("/").getPath());
        }
       // String confPath = this.getClass().getClassLoader().getResource(conf).getFile();
       // System.out.println(confPath);
        ClientGlobal.init(conf);
        trackerClient = new TrackerClient();
        trackerServer = trackerClient.getConnection();
        storageServer = null;
        storageClient = new StorageClient1(trackerServer, storageServer);
    }

    public String uploadFile(String fileName, String extName, NameValuePair[] metas) throws Exception {
        return storageClient.upload_file1(fileName, extName, metas);
    }
    public String uploadFile(String fileName, String extName) throws Exception {
        return storageClient.upload_file1(fileName, extName, null);
    }

    public String uploadFile(String fileName) throws Exception {
        return storageClient.upload_file1(fileName, null, null);
    }
    public String uploadFile(byte[] fileContent, String extName, NameValuePair[] metas) throws Exception {
        return storageClient.upload_file1(fileContent, extName, metas);
    }
    public String uploadFile(byte[] fileContent, String extName) throws Exception {
        return storageClient.upload_file1(fileContent, extName, null);
    }
    public String uploadFile(byte[] fileContent) throws Exception {
        return storageClient.upload_file1(fileContent, null, null);
    }
    public Integer delete_file(String storagePath) throws Exception{
        int result=-1;
        result = storageClient.delete_file1(storagePath);
        return  result;
    }

猜你喜欢

转载自blog.csdn.net/u013305783/article/details/80875324