FastDFS分布式文件系统——上传本地文件

server/2024/9/24 11:11:12/

目录

安装FastDFS

FastDFS

使用Java客户端上传本地文件到FastDFS服务器上

pom.xml

fastdfs_conf配置文件

FastDFS

测试


安装FastDFS

  • 1、用FastDFS一步步搭建文件管理系统 - bojiangzhou - 博客园 (cnblogs.com)
  • 2、FastDFS文件上传功能封装 - 动力节点 (bjpowernode.com)
  • 3、
  • 注意事项:
    • 我主要是按照第二篇文章安装,但经常在make编译时出错,出错后,又按照第一篇文章重新下载资源,再编译,一般都通过。
    • 下面“使用Java客户端上传本地文件到FastDFS服务器上”的项目示例,是按照第二篇文章进行学习的
    • 更改配置文件里的tracker_server时,用的地址是linux的IP地址

FastDFS

  • FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。

    FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。 

    • Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。 

    • Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。

    • Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

使用Java客户端上传本地文件到FastDFS服务器上

1、下载fastdfs-client-java-master

wangwei216/fastdfs-client-java-master (github.com)

2、打包成jar包,导入本地Maven仓库

The POM for org.csource:fastdfs-client-java:jar:1.27-RELEASE is missing_could not find artifact org.csource:fastdfs-client-CSDN博客

3、新建一个Project,Module

项目结构:

pom.xml

  • 如果tracketClient.getConnection()爆红,fast-client-java的依赖选用1.27版本即可
  • 如果在自己Maven的本地仓库找到该依赖,但项目仍然报错,说找不到该依赖,检查settings里的Maven仓库地址是否改为了本地仓库地址
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.study</groupId><artifactId>fastdfs</artifactId><version>1.0-SNAPSHOT</version><!--加入FastDFS的java客户端依赖--><dependencies><dependency><groupId>org.csource</groupId><artifactId>fastdfs-client-java</artifactId><version>1.27-SNAPSHOT</version></dependency></dependencies>
</project>

fastdfs_conf配置文件

  • 从第一步下载的fastdfs-client-java-master里的复制fastdfs_conf过来,然后把tracker_server的IP地址改成linux的IP地址
connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 8080
http.anti_steal_token = no
http.secret_key = FastDFS1234567890#tracker_server = 10.0.11.247:22122
#tracker_server = 10.0.11.248:22122
#tracker_server = 10.0.11.249:22122
tracker_server = 192.168.40.128:22122

FastDFS

java">package com.study.fastdfs;import org.csource.common.MyException;
import org.csource.fastdfs.*;import java.io.IOException;public class FastDFS {private static TrackerServer trackerServer = null;private static StorageServer storageServer = null;public static void main(String[] args) throws IOException, MyException {getStorageClient();fileUpload();fileDownload();fileDelete();closeFastDFS();}//抽取获取StorageClient的方法public static StorageClient getStorageClient() throws IOException, MyException {//1.加载配置文件,默认去classpath下加载ClientGlobal.init("fdfs_client.conf");//2.创建TrackerClient对象TrackerClient trackerClient = new TrackerClient();//3.创建TrackerServer对象trackerServer = trackerClient.getConnection();//4.创建StorageServler对象storageServer = trackerClient.getStoreStorage(trackerServer);//5.创建StorageClient对象,这个对象完成对文件的操作StorageClient storageClient = new StorageClient(trackerServer,storageServer);return storageClient;}//抽取关闭资源的方法public static void closeFastDFS() {if (storageServer != null) {try {storageServer.close();} catch (IOException e) {e.printStackTrace();}}if (trackerServer != null) {try {trackerServer.close();} catch (IOException e) {e.printStackTrace();}}}public static void fileUpload(){try {//1. 获取StorageClient对象StorageClient storageClient = getStorageClient();//2.上传文件  第一个参数:本地文件路径 第二个参数:上传文件的后缀 第三个参数:文件信息String [] uploadArray = storageClient.upload_file("D:/aa.txt","txt",null);for (String str:uploadArray) {System.out.println(str);}} catch (IOException e) {e.printStackTrace();} catch (MyException e) {e.printStackTrace();} finally {closeFastDFS();}}/*** group1* M00/00/00/wKgogGZajP6ADZGDAAAAG082hAE063.txt*///下载文件的方法public static void fileDownload(){try {//1. 获取StorageClient对象StorageClient storageClient = getStorageClient();//2.下载文件 返回0表示成功,其它均表示失败int num = storageClient.download_file("group1","M00/00/00/wKgogGZajP6ADZGDAAAAG082hAE063.txt","E:/bb.txt");System.out.println(num);} catch (IOException e) {e.printStackTrace();} catch (MyException e) {e.printStackTrace();} finally {closeFastDFS();}}//删除文件的方法public static void fileDelete(){try {//1. 获取StorageClient对象StorageClient storageClient = getStorageClient();//2.删除文件 返回0表示成功,其它均表示失败int num = storageClient.delete_file("group1","M00/00/00/wKgogGZajP6ADZGDAAAAG082hAE063.txt");System.out.println(num);} catch (IOException e) {e.printStackTrace();} catch (MyException e) {e.printStackTrace();} finally {closeFastDFS();}}
}

测试

  • 1. 启动带有Fastdfs模块的Nginx

    /usr/local/nginx_dfs/sbin/nginx -c /usr/local/nginx_dfs/conf/nginx.conf
    
  • 2. 重启或启动FastDFS服务进程

    fdfs_trackerd /etc/fdfs/tracker.conf restart
    
    fdfs_storaged /etc/fdfs/storage.conf restart
    • 如果storage启动失败,或者一直卡住,没有结果,排除了配置文件等一些明显的错误后,可能是网络问题,重启网络即可

  • 3、启动项目

    • 测试文件上传时,报如下错误,则需要关闭防火墙

结果:


http://www.ppmy.cn/server/46377.html

相关文章

Spring Security3.0版本

前言&#xff1a; 核心&#xff1a; A >> &#xff1f; >> B &#xff1f;代表判断层&#xff0c;由Security实现 这是之前的版本浓缩&#xff0c;现在3.0版本添加了更匹配的内容描写&#xff0c;匹配了mvc模式 非mvc模式 核心&#xff1a;client&#x…

JAVA多态

一.向上转型 上代吗&#xff1a; 这里我们定义了三个java文件&#xff0c;这里用ANM来接受一个Dog类型的类&#xff0c;我们发现不会报错&#xff0c;这就是发生了向上转型&#xff0c;由子类变成了父类 二.方法的重写 那么我们应该如何调用子类的函数呢 首先我们试一下直接…

Redis实现延迟队列

最近用到一个延迟消息的功能&#xff0c;第一时间想到使用MQ或者MQ的插件&#xff0c;因为数据量不大&#xff0c;所以尝试使用Redis来实现了&#xff0c;毕竟Redis也天生支持类似MQ的队列消费&#xff0c;所以&#xff0c;在这里总结了一下Redis实现延迟消息队列的方式。 一、…

vi和vim有什么不同?

vi 和 vim 都是流行的文本编辑器&#xff0c;它们之间有以下主要区别&#xff1a; 历史&#xff1a; vi 是一个非常古老的文本编辑器&#xff0c;最初由 Bill Joy 在 1976 年为 Unix 系统编写。vim&#xff08;Vi IMproved&#xff09;是 vi 的一个增强版&#xff0c;由 Bram M…

2024HBCPC:C Goose Goose Duck

题目描述 Iris 有 n n n 个喜欢玩鹅鸭杀的朋友&#xff0c;编号为 1 ∼ n 1∼n 1∼n。 假期的时候&#xff0c;大家经常会在群里问有没有人玩鹅鸭杀&#xff0c;并且报出现在已经参与的人数。 但是每个人对于当前是否加入游戏都有自己的想法。 具体的来说&#xff0c;对于第…

【MySQL】 1130 -Host ‘14.*.**.*‘ is not allowed to connect to this MySQL server

这个错误表明MySQL服务器拒绝了来自IP地址为14.*.**.*的主机的连接请求。这通常是由于MySQL用户的主机限制引起的。 要解决这个问题&#xff0c;你需要在MySQL中允许指定主机的连接。你可以按照以下步骤操作&#xff1a; 使用具有足够权限的用户&#xff08;如root用户&#x…

Strategy设计模式

Strategy设计模式举例。 看图&#xff1a; 代码实现&#xff1a; #include <iostream>using namespace std;class FlyBehavior { public:virtual void fly() 0; };class QuackBehavior { public:virtual void quack() 0; };class FlyWithWings :public FlyBehavior …

Java高级---Spring Boot---4核心概念

4 核心概念 4.1 Spring Boot的自动配置详解 自动配置 是 Spring Boot 的核心特性之一&#xff0c;它允许框架根据项目中添加的依赖自动配置应用程序。 EnableAutoConfiguration: 这个注解是自动配置的入口点&#xff0c;它告诉 Spring Boot 根据类路径上的库来自动配置 Spri…