拉取fastfds镜像

docker pull delron/fastdfs

1.创建tracker容器

启动,默认端口是22122

 #最后一个tracter是传的参数,表示该容器是tracker,可以传tracker或storage#--network=host 表示使用宿主机的端口,也就是宿主机使用22122端口,容器就不能再使用22122端口,不写这个表示用bridge,bridge宿主机和容器端口不冲突docker run -d --network=host --name=tracker -v /mydata/fdfs/tracker:/var/fdfs delron/fastdfs tracker

如果linux磁盘过小,可以修改tracker配置文件,减少磁盘剩余空间限制,开启上传能力

 docker exec -it tracker bashcd /etc/fdfsvi tracker.conf#只要修改一个参数,比如reserved_storage_space = 10K
### G or g for gigabyte(GB)
### M or m for megabyte(MB)
### K or k for kilobyte(KB)
### no unit for byte(B)
### XX.XX% as ratio such as reserved_storage_space = 10%
reserved_storage_space = 10%#然后退出容器,先停掉容器,docker stop id,然后删除rm -rf /mydate/fdfs/tracker/*,最后启动容器docker start id

2.创建storage容器

docker run -d --network=host --name=storage -e TRACKER_SERVER=xx.xx.xx.xx:22122 -v /mydata/fdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage

第一次启动是成功的,如果希望重新启动,必须要先删除/mydata/fdfs/xxx/data/fdfs_xxx.pid,然后在启动,否则查看日志会报错

编写shell脚本 vi start_fdfs.sh

rm -rf /mydata/fdfs/tracker/data/*.pid
rm -rf /mydata/fdfs/storage/data/*.pid
docker start tracker
docker start storage

ls -l|grep start_fdfs.sh

默认是没有执行权限的

-rw-r–r-- 1 root root 120 4月 9 23:14 start_fdfs.sh

授权 chmod 775 start_fdfs.sh

-rwxr-xr-x 1 root root 120 4月 9 23:14 start_fdfs.sh

执行 sh start_fdfs.sh

以上都执行完毕后,开始编写代码

3.代码部分

导入依赖

        <!--fastdfs依赖--><dependency><groupId>cn.bestwu</groupId><artifactId>fastdfs-client-java</artifactId><version>1.27</version></dependency>

添加application.yml文件

#设置可上传文件的大小
spring:servlet:multipart:max-file-size: 100MB #一个上传文件最大容量。默认1Mmax-request-size: 500MB #一次请求最大容量。默认10M

在resources目录下新建配置文件fdfs.properties

fastdfs.connect_timeout_in_seconds=10
fastdfs.network_timeout_in_seconds=30
和跟踪器配置文件/etc/fdfs/tracker.conf中的http.server_port一致
fastdfs.http_tracker_http_port=8080
#如果跟踪器是集群,用逗号分割
fastdfs.tracker_servers=xx.xx.xx.xx:22122
fastdfs.charset=UTF-8

fastdfs工具类

package com.gzs.upload.utils;import org.csource.common.MyException;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;/*** @author GZS* @date 2022年04月09日*/
public class FastDFSUtils {//初始化客户端对象//存储器客户端对象。文件上传下载,是保存在存储器中的。private final static StorageClient storageClient;static {try {//给GlobalClient类型中的静态属性g_tracker_group赋值//加载配置文件// InputStream inputStream = FastDFSUtils.class.getClassLoader()//       .getResourceAsStream("fdfs.properties");// Properties properties = new Properties();// properties.load(inputStream);ClientGlobal.initByProperties("fdfs.properties");//找跟踪器//跟踪器客户端TrackerClient trackerClient = new TrackerClient();TrackerServer trackerServer = trackerClient.getConnection();StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);storageClient = new StorageClient(trackerServer,storageServer);} catch (Exception e) {e.printStackTrace();throw new ExceptionInInitializerError(e);}}/*** 上传文件到fastdfs* @param inputStream* @param originalFileName 文件上传原始名* @return*/public static String[] upload(InputStream inputStream,String originalFileName){try {// 获取文件大小int size = inputStream.available();byte[] tmp = new byte[size];//读取文件q全部内容到字节数组inputStream.read(tmp,0,size);// 准备文件元数据NameValuePair[] nameValuePairs = new NameValuePair[]{new NameValuePair("fileName",originalFileName),new NameValuePair("size",size+""),new NameValuePair("createTime",System.currentTimeMillis()+"")};// 上传文件,返回一个字符串,长度是2。// 0下标是存储器的卷名// 1下标是存储器自动生成的文件名(包括文件夹)String[] result = storageClient.upload_file(tmp, originalFileName.substring(originalFileName.lastIndexOf(".")+1), nameValuePairs);return result;} catch (Exception e) {e.printStackTrace();return null;}}
}

实现类impl

 @Overridepublic boolean uploadFile(MultipartFile file) {try {String[] result = FastDFSUtils.upload(file.getInputStream(),file.getOriginalFilename());if (result == null){return false;}//打印结果  [group1, M00/00/00/rB-Q-GJRuKSAV8wxAAAqlvhD1VI241.txt]//M00,代表的你所存放的目录,/00/00代表00目录下的00目录System.out.println(Arrays.toString(result));return true;} catch (IOException e) {e.printStackTrace();return false;}

FastDFS上传下载文件相关推荐

  1. 初级版python登录验证,上传下载文件加MD5文件校验

    服务器端程序 import socket import json import struct import hashlib import osdef md5_code(usr, pwd):ret = ...

  2. SecureCRT上传下载文件

    2019独角兽企业重金招聘Python工程师标准>>> SecureCRT是一个仿真终端连接工具.它可以方便的连接SSH服务器,远程管理Linux.同时,它还能使用多种协议方便的上传 ...

  3. Linux下支持rz/sz上传下载文件

    )    工具说明 在SecureCRT这样的ssh登录软件里, 通过在Linux界面里输入rz/sz命令来上传/下载文件. 对于RHEL5, rz/sz默认没有安装所以需要手工安装. sz: 将选定 ...

  4. python实现文件下载-python实现上传下载文件功能

    最近刚学python,遇到上传下载文件功能需求,记录下! django web项目,前端上传控件用的是uploadify. 文件上传 - 后台view 的 Python代码如下: @csrf_exem ...

  5. 在Windows上使用终端模拟程序连接操作Linux以及上传下载文件

    在Windows上使用终端模拟程序连接操作Linux以及上传下载文件 [很简单,就是一个工具的使用而已,放这里是做个笔记.] 刚买的云主机,或者是虚拟机里安装的Linux系统,可能会涉及到在windo ...

  6. python文件拷贝并校验_初级版python登录验证,上传下载文件加MD5文件校验

    importosimportjsonimportsocketimportstructimporthashlib#import time deflogin(): usr= input('请输入用户名:' ...

  7. JavaWeb:上传下载文件

    1. 文件上传概述 1.1 文件上传的作用 例如网络硬盘!就是用来上传下载文件的. 在智联招聘上填写一个完整的简历还需要上传照片呢. 1.2 文件上传对页面的要求 上传文件的要求比较多,需要记一下: ...

  8. Linux下scp无密码上传 下载 文件 目录的方法

    这篇文章主要介绍了Linux下scp无密码上传 下载 文件 目录的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在Linux下远程备份的时候,需要配置scp的 无密码复制文件.目录.就把这个 ...

  9. python实现文件上传功能_python实现上传下载文件功能

    最近刚学python,遇到上传下载文件功能需求,记录下! django web项目,前端上传控件用的是uploadify. 文件上传 - 后台view 的 Python代码如下: @csrf_exem ...

最新文章

  1. 酷派奖励程序员10 万股期权!因代码贡献受 Linux 之父亲自点名赞赏
  2. android studio修改项目包名
  3. 无法去掉自增标识_为什么 MySQL 的自增主键不单调也不连续
  4. jsp中有关于超链接的问题
  5. 又重新让aspspider.net支持中文PDF输出了
  6. 各种当下编程风格一览,看一看你属于哪一种?
  7. wordpress 后台404解决办法
  8. linux gdb基本概念
  9. PMP 管理学6大定律之四(光环效应)
  10. CSS的行内样式与内联样式,看这篇就够了
  11. Python双人五子棋
  12. origin柱状图坐标标签_origin菜鸟求助。如何做横坐标连续(如下图)的柱状图?...
  13. Ubuntu配置拼音和五笔输入法
  14. 电子电路仿真软件中文版_汽车电子EMC仿真简介
  15. 【5G系列】一文打尽 IMSI、TMSI、GUTI、P-TMSI、S-TMSI、LMSI、5G-TMSI、5G-GUTI、5G-S-TMSI
  16. LINUX基础知识笔记全
  17. DOM对象,控制HTML元素
  18. Multisim基础 DIP开关 添加元件的位置
  19. PYTHON 牛客刷题记录
  20. 如何获得CSDN下载积分和C币规则

热门文章

  1. 实现一个微信公众号智能问答机器人
  2. python画图---matplotlib安装教程
  3. php自定义函数全局声明,thinkphp3.2自定义函数全局功能函数,模板自定义函数
  4. 西门子培训2——OID
  5. oracle存档模式,oracle归档模式管理
  6. ICT是什么?ICT的社会和经济影响
  7. 视觉系统(CCD)光轴校正-项目实践
  8. 有哪些值得收藏的运营思维导图?
  9. Java介绍:java是什么?
  10. javascript的异步编程