Docker搭建分布式文件系统fastDFS及SpringBoot整合fastDFS

docker安装fastdfs镜像

 docker pull morunchang/fastdfs

运行tracker

  docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh

运行storage,注意把xxx.xxx.xxx.xxx换成自己的EOS服务器IP

docker run -d --name storage --net=host -e TRACKER_IP=xxx.xxx.xxx.xxx:22122 -e GROUP_NAME= morunchang/fastdfs sh storage.sh

进入storage容器内部

docker exec -it storage  /bin/bash

修改nginx配置文件

vi /data/nginx/conf/nginx.conf

添加如下内容

location /group1/M00 {
     proxy_next_upstream http_502 http_504 error timeout invalid_header;
     proxy_cache http-cache;
     proxy_cache_valid  200 304 12h;
     proxy_cache_key $uri$is_args$args;
     proxy_pass http://fdfs_group1;
     expires 30d;
 }

退出

exit

重启storage

docker restart storage

开启端口号22122,80,23000,注意开启23000

firewall-cmd --zone=public --add-port=22122/tcp --permanent 
firewall-cmd --zone=public --add-port=80/tcp --permanent 
firewall-cmd --zone=public --add-port=23000/tcp --permanent 

在pom.xml中引入依赖fastDFS的java客户端依赖,使用开源中国的

        <dependency>
            <groupId>net.oschina.zcx7878groupId>
            <artifactId>fastdfs-client-javaartifactId>
            <version>1.27.0.0version>
        dependency>

在类路径下添加配置文件fdfs_client.conf


connect_timeout=30

network_timeout=60

base_path=/home/fastdfs

#xxx.xxx.xxx.xxx改为自己EOS服务器的ip
tracker_server=xxx.xxx.xxx.xxx:22122

log_level=info

use_connection_pool = false

connection_pool_max_idle_time = 3600

load_fdfs_parameters_from_tracker=false

use_storage_id = false

storage_ids_filename = storage_ids.conf

http.tracker_server_port=80

写一个demo测试使用

package com.lhc.fastdfs.test;


import org.csource.fastdfs.*;
import org.springframework.core.io.ClassPathResource;

public class TestFastDFS {

    public static void main(String[] args) throws Exception {
        String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();
        // 1、加载配置文件,配置文件中的内容就是 tracker 服务的地址。
        ClientGlobal.init(filePath);
        // 2、创建一个 TrackerClient 对象。直接 new 一个。
        TrackerClient trackerClient = new TrackerClient();
        // 3、使用 TrackerClient 对象创建连接,获得一个 TrackerServer 对象。
        TrackerServer trackerServer = trackerClient.getConnection();
        // 4、创建一个 StorageServer 的引用,值为 null
        StorageServer storageServer = null;
        // 5、创建一个 StorageClient 对象,需要两个参数 TrackerServer 对象、StorageServer 的引用
        StorageClient storageClient = new StorageClient(trackerServer, storageServer);
        // 6、使用 StorageClient 对象上传图片。
        //扩展名不带“.”
        String[] strings = storageClient.upload_file("C:\Users\Administrator\Desktop\timg.jpg", "jpg",
            null);

        // 7、返回数组。包含组名和图片的路径。
        for (String string : strings) {
            System.out.println(string);
        }
    }
}

输出
group1
M00/00/00/rBL-lVtN0uKAImXSAAAVnhPk2K8504.png
访问fastDFS文件系统,效果如下,可见已经存储在文件系统中
http://xxx.xxx.xxx.xxx:8080/group1/M00/00/00/rBL-lVtN2OCAJS0UAAE7_YSxmAs135.jpg
Docker搭建分布式文件系统fastDFS及SpringBoot整合fastDFS_第1张图片

使用angular.js上传文件
html的内容如下


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Indextitle>
head>

<script type="text/javascript" src="webjars/angularjs/1.7.2/angular.min.js">script>

<body>
<div ng-app="myApp" ng-controller="myCon">


        <input type="file" name="uploadFile" id="uploadFile">

        <input type="button" value="upload" ng-click="uploadFile()">

        <img src="{{image.url}}" width="200px" height="200px">

div>

body>

    <script type="text/javascript" src="userController.js">script>
html>

controller的js如下


var app=angular.module("myApp",[]);

app.controller("myCon",function ($scope,$http) {
    $scope.uploadFile=function(){
        var formData=new FormData();
        var file =document.querySelector("#uploadFile").files[0];
        formData.append("file",file);
        $http({
            method:'POST',
            url:'/uploadFile',
            data: formData,
            headers: {'Content-Type':undefined},
            transformRequest: angular.identity
        }).then(function successCallback(response) {
            $scope.image={};
            $scope.image.url = response.data.message;
        }, function errorCallback(response) {
            // 请求失败执行代码
            alert("上传失败")
        });
    }
})

springboot后台代码如下,其中FastDFSClient,为对fastDFS的客户端的操作代码的封装,大家可以自己封装一下

@RestController
public class UserController {

    @Value("${FILE_URL}")
    private String FILE_URL;

    @RequestMapping("/uploadFile")
    public R upload(@RequestParam(value = "file",required = true) MultipartFile file)throws Exception{

        String originalFilename = file.getOriginalFilename();

        String name = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);

        FastDFSClient fastDFSClient = new FastDFSClient("classpath:fdfs_client.conf");

        String s = fastDFSClient.uploadFile(file.getBytes(), name);
        System.out.println(s);

        R r = new R();
        r.setMessage(FILE_URL+s);
        r.setStatus("200");

        return r;
    }
}

选择文件点击上传后效果如下
Docker搭建分布式文件系统fastDFS及SpringBoot整合fastDFS_第2张图片

你可能感兴趣的:(SpringBoot,Docker)