使用docker搭建FastDFS文件存储系统

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/

  1. 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

  1. 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;
    

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值