FastDFS上传下载文件
拉取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上传下载文件相关推荐
- 初级版python登录验证,上传下载文件加MD5文件校验
服务器端程序 import socket import json import struct import hashlib import osdef md5_code(usr, pwd):ret = ...
- SecureCRT上传下载文件
2019独角兽企业重金招聘Python工程师标准>>> SecureCRT是一个仿真终端连接工具.它可以方便的连接SSH服务器,远程管理Linux.同时,它还能使用多种协议方便的上传 ...
- Linux下支持rz/sz上传下载文件
) 工具说明 在SecureCRT这样的ssh登录软件里, 通过在Linux界面里输入rz/sz命令来上传/下载文件. 对于RHEL5, rz/sz默认没有安装所以需要手工安装. sz: 将选定 ...
- python实现文件下载-python实现上传下载文件功能
最近刚学python,遇到上传下载文件功能需求,记录下! django web项目,前端上传控件用的是uploadify. 文件上传 - 后台view 的 Python代码如下: @csrf_exem ...
- 在Windows上使用终端模拟程序连接操作Linux以及上传下载文件
在Windows上使用终端模拟程序连接操作Linux以及上传下载文件 [很简单,就是一个工具的使用而已,放这里是做个笔记.] 刚买的云主机,或者是虚拟机里安装的Linux系统,可能会涉及到在windo ...
- python文件拷贝并校验_初级版python登录验证,上传下载文件加MD5文件校验
importosimportjsonimportsocketimportstructimporthashlib#import time deflogin(): usr= input('请输入用户名:' ...
- JavaWeb:上传下载文件
1. 文件上传概述 1.1 文件上传的作用 例如网络硬盘!就是用来上传下载文件的. 在智联招聘上填写一个完整的简历还需要上传照片呢. 1.2 文件上传对页面的要求 上传文件的要求比较多,需要记一下: ...
- Linux下scp无密码上传 下载 文件 目录的方法
这篇文章主要介绍了Linux下scp无密码上传 下载 文件 目录的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在Linux下远程备份的时候,需要配置scp的 无密码复制文件.目录.就把这个 ...
- python实现文件上传功能_python实现上传下载文件功能
最近刚学python,遇到上传下载文件功能需求,记录下! django web项目,前端上传控件用的是uploadify. 文件上传 - 后台view 的 Python代码如下: @csrf_exem ...
最新文章
- 酷派奖励程序员10 万股期权!因代码贡献受 Linux 之父亲自点名赞赏
- android studio修改项目包名
- 无法去掉自增标识_为什么 MySQL 的自增主键不单调也不连续
- jsp中有关于超链接的问题
- 又重新让aspspider.net支持中文PDF输出了
- 各种当下编程风格一览,看一看你属于哪一种?
- wordpress 后台404解决办法
- linux gdb基本概念
- PMP 管理学6大定律之四(光环效应)
- CSS的行内样式与内联样式,看这篇就够了
- Python双人五子棋
- origin柱状图坐标标签_origin菜鸟求助。如何做横坐标连续(如下图)的柱状图?...
- Ubuntu配置拼音和五笔输入法
- 电子电路仿真软件中文版_汽车电子EMC仿真简介
- 【5G系列】一文打尽 IMSI、TMSI、GUTI、P-TMSI、S-TMSI、LMSI、5G-TMSI、5G-GUTI、5G-S-TMSI
- LINUX基础知识笔记全
- DOM对象,控制HTML元素
- Multisim基础 DIP开关 添加元件的位置
- PYTHON 牛客刷题记录
- 如何获得CSDN下载积分和C币规则