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

2024-06-01 12:20

本文主要是介绍FastDFS分布式文件系统——上传本地文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

安装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

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、启动项目

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

结果:

这篇关于FastDFS分布式文件系统——上传本地文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020999

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

一文教你使用Python实现本地分页

《一文教你使用Python实现本地分页》这篇文章主要为大家详细介绍了Python如何实现本地分页的算法,主要针对二级数据结构,文中的示例代码简洁易懂,有需要的小伙伴可以了解下... 在项目开发的过程中,遇到分页的第一页就展示大量的数据,导致前端列表加载展示的速度慢,所以需要在本地加入分页处理,把所有数据先放

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

deepseek本地部署使用步骤详解

《deepseek本地部署使用步骤详解》DeepSeek是一个开源的深度学习模型,支持自然语言处理和推荐系统,本地部署步骤包括克隆仓库、创建虚拟环境、安装依赖、配置模型和数据、启动服务、调试与优化以及... 目录环境要求部署步骤1. 克隆 DeepSeek 仓库2. 创建虚拟环境3. 安装依赖4. 配置模型

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

Java文件上传的多种实现方式

《Java文件上传的多种实现方式》文章主要介绍了文件上传接收接口的使用方法,包括获取文件信息、创建文件夹、保存文件到本地的两种方法,以及如何使用Postman进行接口调用... 目录Java文件上传的多方式1.文件上传接收文件接口2.接口主要内容部分3.postman接口调用总结Java文件上传的多方式1

springboot 加载本地jar到maven的实现方法

《springboot加载本地jar到maven的实现方法》如何在SpringBoot项目中加载本地jar到Maven本地仓库,使用Maven的install-file目标来实现,本文结合实例代码给... 在Spring Boothttp://www.chinasem.cn项目中,如果你想要加载一个本地的ja

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小