阿里云服务器搭建FTP图片服务器[图文详解]

 

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

 

Tracker 用来负载均衡与调度   

Storage 保存图片  

1.1 文件上传流程

 

1.2 文件下载流程

 

1.3 上传文件的文件名

客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。

文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

 n 组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。

n 虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。

n 数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。

文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

1.4 FastDFS搭建

 

可以使用一台虚拟机来模拟,只有一个Tracker、一个Storage服务。

配置nginx访问图片。

 

1需要的工具  

 

 

 

2 安装fastdfs之前先安装libevent工具包  

如果没有gcc环境,需要安装gcc:

yum install gcc-c++

Fastdfs依赖libevent库,需要安装

yum -y install libevent

3 先安装libfastcommon-1.0.7

a) 解压缩

b) ./make.sh

c) ./make.sh install

 

进入usr下面

把lib64/libfastcommon.so  拷贝到lib下面

4 安装tracker文件

a) 解压缩 FastDFS_v5.05.tar.gz

b) ./make.sh

c) ./make.sh install

 

会在usr/lib  生成一坨fdfs_*的文件  

 d).把/root/FastDFS/conf配置文件都要放在/etc/fdfs下面

cp * /etc/fdfs/

e). 配置/etc/fdfs/tracker.conf

 

需要修改上述路径为自己配置的路径 /home/fdfs/tracker

F) 启动tracker

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart  (重启)

 

5 安装storage 服务

1)如果在不同的服务器安装,第四部1~4步需要重新执行

2)修改/etc/fdfs/storage.conf文件

第一个地方:

 

 

第二个地方

 

 

第三个地方

 

3) 启动storage服务

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf

 

 

6 测试服务  

a) 修改配置文件/etc/fdfs/client.conf

创建 /home/fastdfs/client

 

 

测试

/usr/bin/fdfs_test /etc/fdfs/client.conf upload /root/FastDFS/conf/anti-steal.jpg

 

会返回上述的一个图片路径   拷贝进浏览器发现不好使

 

7 搭建nginx提供的http服务  

可以使用官方提供的nginx插件,要使用nginx插件需要重新编译  

1 解压压缩包fastdfs-nginx-module_v1.16.tar.gz

2 修改/root/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=/root/fastdfs-nginx-module/src

4 将/usr/lib64/libfdfsclient.so 拷贝到/usr/lib   如果不拷贝则会报错

5  make

6  make install

7  将/root/fastdfs-nginx-module/src/mod_fastdfs.conf 复制到/etc/fdfs下面  并编辑

 

 

 

 

 

 

 

 

 

8 nginx的配置

 

在nginx的配置文件(conf里面的 vim nginx.conf)中添加一个Server:

server {

        listen       80;

        server_name 39.106.51.32; ---对应我们的IP或者阿里云的公网IP

 

        location /group1/M00/{

                #root /home/FastDFS/fdfs_storage/data;

                ngx_fastdfs_module;

        }

}

图片服务器的使用  

1 把FastDFS提供的jar包添加到工程中  

2 初始化全局配置,加载一个配置文件

 

 

3 创建一个TrackerClient对象

4 创建一个TrackerServer对象

5 声明一个StorageServer对象

6 获得StorageClient对象

7 直接调用StorageClient对象方法上传文件  

 

 

在项目中如何上传文件  

Service

@Override

public String updateFile(MultipartFile book_image)  {

try {

String fileName = book_image.getOriginalFilename();

System.out.println(fileName);

ClientGlobal.init("E:\\yulei  xiangmu\\ssm_book\\config\\client.conf");

// 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(book_image.getBytes(), "jpg", null);

String url = "";

for(String str : strings)

{

url += str + "/";

}

url = "http://192.168.11.132/" + url.substring(0,url.lastIndexOf("/"));

return url;

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

 

}

 

Controller

@RequestMapping("/addBook1.action")

public String insert1(Book book,MultipartFile book_image) throws IllegalStateException, IOException{

PictureService pictureService = new PictureServiceImpl();

String url = pictureService.updateFile(book_image);

book.setBookpic(url);

bookService.insertBook(book);

return "redirect:findAll.action";

}

iptables -L;iptables -F;service iptables stop    关闭防火墙

 

你可能感兴趣的:(自学工具,阿里云服务器)