1.拉取镜像
docker pull morunchang/fastdfs
2.启动tracker
docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh
3.启动storage
docker run -d --name storage --net=host -e TRACKER_SERVER=111.229.229.183:22122 -e TRACKER_IP=111.229.229.183:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh
4.放开端口22122 和23000
firewall-cmd --query-port=22122/tcp
firewall-cmd --permanent --add-port=22122/tcp
firewall-cmd --reload
5.修改storage配置信息
docker exec -it storage /bin/bash
cd /etc/nginx/conf
vi nginx.conf
nginx加上 user root;配置
cd /etc/fdfs/
- storage.conf
group_name=group1 #组名是不是跟你访问路径中的组名一致?????
base_path=/fastdfs/storage #这个文件路径存不存在????
store_path0=/fastdfs/storage #这个文件路径存不存在????
tracker_server=192.168.59.131:22122 #ip对吗???
http.server_port=80 #跟你在nginx.conf配置的舰艇端口号保持一致,并且为了可以省略不写端口号,建议改成80
- tracker.conf:
base_path=/fastdfs/tracker #路径存在吗????
client.conf:
base_path=/fastdfs/tracker #这个文件路径存不存在????
tracker_server=192.168.59.131:22122 #ip正确吗????
http.tracker_server_port=80 #端口号是否跟之前配置的一致,统一起来
8.检查mod_fastdfs.conf
tracker_server=192.168.59.131:22122 #ip?
url_have_group_name = true #这个是true???
store_path0=/fastdfs/storage #路径存在吗????
9.java代码
(1).fastdfs.conf
connect_timeout=60
network_timeout=60
charset=UTF-8
http.tracker_http_port=80
tracker_server=外网ip:22122
(2).fastdfsFile 实体类封装
public class FastDFSFile implements Serializable{
//名字
private String name;
//内容
private byte[] content;
//后缀
private String ext;
private String md5;
private String author;
public FastDFSFile(String name, byte[] content, String ext) {
this.name = name;
this.content = content;
this.ext = ext;
}
public FastDFSFile(String name, byte[] content, String ext, String md5, String author) {
this.name = name;
this.content = content;
this.ext = ext;
this.md5 = md5;
this.author = author;
}
省略get,set
(3).fastdfsUtil
import com.example.service_hi.file.FastDFSFile;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;
import org.springframework.core.io.ClassPathResource;
/**
-
@program: spring_cloud
-
@description:
-
@author: xx
-
@create: 2020-04-03 16:50
**/
public class FastDFSUtil {static {
try {
//获取fastdfs配置信息
String fileName = new ClassPathResource(“fdfs_client.conf”).getPath();
//初始化客户端
ClientGlobal.init(fileName);}catch (Exception e){ e.printStackTrace(); }
}
public static String[] upload(FastDFSFile fastDFSFile) throws Exception {
//添加额外信息 NameValuePair[] metaList = new NameValuePair[1]; metaList[0] = new NameValuePair("拍摄地址","天津"); //创建tracker客户端 TrackerClient trackerClient = new TrackerClient(); //连接tracker TrackerServer trackerServer = trackerClient.getConnection(); //创建storage客户端 StorageClient storageClient = new StorageClient(trackerServer,null); //创传文件 参数一文件内容 参数二文件后缀 参数三额外信息 String[] uploads = storageClient.upload_file(fastDFSFile.getContent(), fastDFSFile.getExt(), metaList); return uploads;
}
}
(4).controller
@RestController
@RequestMapping("/upload")
@CrossOrigin
public class FileUploadController {@PostMapping
public Map<String,Object> upload(@RequestParam(value = “file”)MultipartFile file) throws Exception {Map<String,Object> map = new HashMap<>(); //封装文件对象 参数一获取文件名称,参数二文件内容,参数三截取文件后缀名 FastDFSFile fastDFSFile = new FastDFSFile(file.getOriginalFilename(),file.getBytes(), StringUtils.getFilenameExtension(file.getOriginalFilename())); //上传文件 String[] uploads = FastDFSUtil.upload(fastDFSFile); //拼接服务器返回的文件地址 String url = "http://111.229.229.183/"+uploads[0]+"/"+uploads[1]; map.put("ok","ok"); map.put("data",url); return map;
}
}