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

相关文章

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

分布式文件系统设计

分布式文件系统是分布式领域的一个基础应用,其中最著名的毫无疑问是 HDFS/GFS。如今该领域已经趋向于成熟,但了解它的设计要点和思想,对我们将来面临类似场景 / 问题时,具有借鉴意义。并且,分布式文件系统并非只有 HDFS/GFS 这一种形态,在它之外,还有其他形态各异、各有千秋的产品形态,对它们的了解,也对扩展我们的视野有所俾益。本文试图分析和思考,在分布式文件系统领域,我们要解决哪些问题、有

在SSH的基础上使用jquery.uploadify.js上传文件

在SSH框架的基础上,使用jquery.uploadify.js实现文件的上传,之前搞了好几天,都上传不了, 在Action那边File接收到的总是为null, 为了这个还上网搜了好多相关的信息,但都不行,最后还是搜到一篇文章帮助到我了,希望能帮助到为之困扰的人。 jsp页面的关键代码: <link rel="stylesheet" type="text/css" href="${page

本地如何快速启动静态服务器

本地快速启动静态服务器 有许多第三方库可以帮助你快速启动一个静态服务器,甚至无需编写代码。通过命令行运行这些库后,它们会自动启动一个服务器并打开指定端口,展示当前目录下的文件内容: 电脑得提前安装NodeJS 1、http-server http-server 是一个轻量级的命令行工具,允许你快速启动一个静态文件服务器。 安装 npm install -g http-server

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

Vue3上传图片报错:Current request is not a multipart request

当你看到错误 "Current request is not a multipart request" 时,这通常意味着你的服务器或后端代码期望接收一个 multipart/form-data 类型的请求,但实际上并没有收到这样的请求。在使用 <el-upload> 组件时,如果你已经设置了 http-request 属性来自定义上传行为,并且遇到了这个错误,可能是因为你在发送请求时没有正确地设置

OpenStack:Glance共享与上传、Nova操作选项解释、Cinder操作技巧

目录 Glance member task Nova lock shelve rescue Cinder manage local-attach transfer backup-export 总结 原作者:int32bit,参考内容 从2013年开始折腾OpenStack也有好几年的时间了。在使用过程中,我发现有很多很有用的操作,但是却很少被提及。这里我暂不直接

【20240907问题记录(未解决)】Conda环境问题:SSH与本地环境变量不一致

Conda 允许用户在同一系统上创建多个独立的Python环境。然而,最近遇到了一个奇怪的问题:通过SSH连接到远程Ubuntu机器时,Conda环境变量的行为与本地机器不一致。以下是具体遇到的问题: 1. 问题描述 在本地Ubuntu机器上,我的conda的python版本是3.6,而pip版本可以通过命令 pip --version 查看,显示为: pip 21.3.1 from /ho

使用http-request 属性替代action绑定上传URL

在 Element UI 的 <el-upload> 组件中,如果你需要为上传的 HTTP 请求添加自定义的请求头(例如,为了通过身份验证或满足服务器端的特定要求),你不能直接在 <el-upload> 组件的属性中设置这些请求头。但是,你可以通过 http-request 属性来自定义上传的行为,包括设置请求头。 http-request 属性允许你完全控制上传的行为,包括如何构建请求、发送请

Docker+FastDFS+Lua搭建文件服务器进阶版

使用FastDFS+Nginx+Lua+GraphicsMagick搭建类似淘宝的图片服务器 1、FastDFS安装1.1、镜像下载1.2、开启tracker容器1.3、开启storage容器1.4、测试 2、FastDFS集成Nginx+lua+GraphicsMagick2.1、依赖包下载2.2、安装软件基础包2.3、依赖安装2.4、配置Lua脚本实现图片缩略图2.5、修改nginx.c