java之学习记录 7 - 2 - FastDFS文件上传、查询与下载实现

3 篇文章 0 订阅

FastDFS的上传与下载

1 安装

1.1 安装gcc(编译时需要)

yum install -y gcc gcc-c++

1.2 安装libevent(运行时需求)

yum -y install libevent

1.3 安装 libfastcommon

libfastcommon FastDFS 官方提供的, libfastcommon 包含了 FastDFS 运行所需要的一些基础库。
 
1. 上传 libfastcommon-master.zip /opt
安装解压zip包的命令: yum install -y unzip 
解压包: unzip libfastcommon.zip 
进入目录: cd libfastcommon-master
2. 编译
./make.sh
  • 如果:make.sh的权限不够,则需要授权(可执行的权利)
chmod 777 make.sh
3. 安装
./make.sh install
  • libfastcommon安装好后会在/usr/lib64 目录下生成 libfastcommon.so 库文件

4. 拷贝库文件

cd /usr/lib64 
cp libfastcommon.so /usr/lib

1.4 安装Tracker

下载 FastDFS_v5.05.tar.gz,并上传到 /opt

tar -zxvf FastDFS_v5.05.tar.gz 
cd FastDFS 
./make.sh 
./make.sh install
安装成功将安装目录下的 conf 下的文件拷贝到 /etc/fdfs/
cp /opt/FastDFS/conf/* /etc/fdfs/

2 配置

  • Tracker配置
vim /etc/fdfs/tracker.conf
#端口号 
port=22122 
#基础目录(Tracker运行时会向此目录存储storage的管理数据)(基础目录不存在的话,需要自行创建 mkdir /home/fastdfs)
base_path=/home/fastdfs
  • Storage配置
#配置组名 
group_name=group1 
#端口 
port=23000 
#向tracker心跳间隔(秒) 
heart_beat_interval=30 
#storage基础目录 #目录不存在,需要自行创建 
base_path=/home/fastdfs 
#store存放文件的位置(store_path) 
#可以理解一个磁盘一个path,多个磁盘,多个store_path 
#fdfs_storage目录不存在,需要自行创建 
#mkdir /home/fastdfs/fdfs_storage 
store_path0=/home/fastdfs/fdfs_storage
#如果有多个挂载磁盘则定义多个store_path,如下 
#store_path1=..... (M01) 
#store_path2=..... (M02) 
#配置tracker服务器:IP
tracker_server=192.168.58.222:22122 
#如果有多个则配置多个tracker 
#tracker_server=192.168.58.x:22122

3 启动服务

  • 启动tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
  • 启动storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
  • 查看所有运行的端口:
netstat -ntlp

4 搭建 Java工程

4.1 pom.xml

    <dependencies>
        <!--fastdfs的java客户端-->
        <dependency>
            <groupId>net.oschina.zcx7878</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <version>1.27.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
        </dependency>
    </dependencies>

4.2 创建配置文件

resources下创建config目录,在config目录下创建 fastdfs-client.properties,内容如下:

##fastdfs-client.properties
fastdfs.connect_timeout_in_seconds=5
fastdfs.network_timeout_in_seconds=30
fastdfs.charset=UTF-8
fastdfs.http_anti_steal_token=false
fastdfs.http_secret_key=FastDFS1234567890
fastdfs.http_tracker_http_port=80
fastdfs.tracker_servers=192.168.58.222:22122

4.3 文件上传

package test;

import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;

/*
* 文件上传
* */
public class TestUpload {
    public static void main(String[] args) {
        try {
            // 加载配置文件
            ClientGlobal.initByProperties("config/fastdfs-client.properties");
            // 创建tracker客户端
            TrackerClient trackerClient = new TrackerClient();
            // 通过tracker客户端获取服务并返回
            TrackerServer trackerServer = trackerClient.getConnection();
            // 声明storage服务
            StorageServer storageServer = null;
            // 定义storage客户端
            StorageClient1 client = new StorageClient1(trackerServer, storageServer);

            // 定义文件元信息
            NameValuePair[] list = new NameValuePair[1];
            list[0] = new NameValuePair("fileName","1.jpg");
            String fileId = client.upload_file1("E:\\java_work\\TheThirdWork\\code 1\\img\\book-01.jpg", "jpg", list);
            System.out.println("fileId = "+ fileId);
            // group1/M00/00/00/wKg63mAwca6ABj6aAAA_iTCetSw439.jpg
            /*
                group1:一台服务器,就是一个组
                M00: store_path0 ----> /home/fastdfs/fdfs_storage/data
                00/00:两级数据目录
            */
            trackerServer.close();
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

4.4 文件查询

package test;

import org.csource.common.MyException;
import org.csource.fastdfs.*;

import java.io.IOException;

/*
* 文件查询
* */
public class TestQuery {
    public static void main(String[] args) throws Exception {
        // 加载配置文件
        ClientGlobal.initByProperties("config/fastdfs-client.properties");
        // 创建tracker客户端
        TrackerClient trackerClient = new TrackerClient();
        // 通过tracker客户端获取服务并返回
        TrackerServer trackerServer = trackerClient.getConnection();
        // 声明storage服务
        StorageServer storageServer = null;
        // 定义storage客户端
        StorageClient1 client = new StorageClient1(trackerServer, storageServer);

        FileInfo fileInfo = client.query_file_info1("group1/M00/00/00/wKg63mAwca6ABj6aAAA_iTCetSw439.jpg");
        if (fileInfo != null){
            System.out.println(fileInfo);
        } else {
            System.out.println("查无此件");
        }

        trackerServer.close();
    }
}

4.5 文件下载

package test;

import org.csource.fastdfs.*;

import java.io.File;
import java.io.FileOutputStream;

/*
* 文件下载
* */
public class TestDownload {
    public static void main(String[] args) throws Exception {
        // 加载配置文件
        ClientGlobal.initByProperties("config/fastdfs-client.properties");
        // 创建tracker客户端
        TrackerClient trackerClient = new TrackerClient();
        // 通过tracker客户端获取服务并返回
        TrackerServer trackerServer = trackerClient.getConnection();
        // 声明storage服务
        StorageServer storageServer = null;
        // 定义storage客户端
        StorageClient1 client = new StorageClient1(trackerServer, storageServer);

        byte[] bytes = client.download_file1("group1/M00/00/00/wKg63mAwca6ABj6aAAA_iTCetSw439.jpg");

        // 通过io将字节数组,转换成一个文件
        FileOutputStream fileOutputStream = new FileOutputStream(new File("E:/xxxx.jpg"));
        fileOutputStream.write(bytes);
        fileOutputStream.close();
        trackerServer.close();
        System.out.println("下载完毕");
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值