• Fastdfs图片上传 配置Fastdfs在linux------基于SpringBoot


    FastDFS是什么?

    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

    FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。


    FastDFS怎么使用 ?        

    首先打开虚拟机

    第一种方式

    第一步 拖入jar包

     前置工作下载安装包

    # https://github.com/happyfish100 下载 fastdfs-master libfastcommon-master
    fastdfs-nginx-module-master
    # http://nginx.org/en/download.html 下载 nginx-1.14.2.tar.gz

    2.前置安装运行库**

    yum install -y unzip zip perl gcc-c ++
    yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel

    3.安装FastDFS

    # 安装 libfastcommon-master.zip

     cd /opt /FastDFS

    unzip -o libfastcommon-master.zip -d /usr/local
    cd /usr/local/libfastcommon-master/
    ./make.sh
    ./make.sh install
    # 安装 fastdfs
      cd /opt /FastDFS
    unzip -o fastdfs-master.zip -d /usr/local
    cd /usr/local/fastdfs-master/
    ./make.sh
    ./make.sh install
    # 拷贝配置文件
    # fastdfs 安装目录下的 conf 下的文件拷贝到 /etc/fdfs/
    cd /usr/local/fastdfs-master/
    cp -r conf/* /etc/fdfs/
    #出现 conf?一直回车
    # 配置启动 trackerd
    cd /etc/fdfs/
    ++++++++++++++++++++++++++
    # 修改 vi tracker.conf
    vim tracker.conf
    base_path = /home/yuqing/fastdfs base_path = /data/fastdfs
    ++++++++++++++++++++++++++
    :wq
    mkdir -p /data/fastdfs
    #启动trackerd
    /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
    # 查看启动情况
    ps -ef | grep tracker
    # 配置并启动 storaged
    cd /etc/fdfs/
    ++++++++++++++++++++++++++
    # 修改 vi storage.conf
    vim storage.conf
    base_path = /home/yuqing/fastdfs 改为 base_path = /data/fastdfs
    store_path0 = /home/yuqing/fastdfs 改为 store_path0 = /data/fastdfs/storage
    #有2个tracker_server 注释一个
    tracker_server = 192 .168.209.121:22122 改为
    tracker_server = 192 .168.42.200:22122 ,这个 ip 改成自己的
    ++++++++++++++++++++++++++
    :wq
    mkdir -p /data/fastdfs/storage # 创建数据日志存储目录
    #启动storage
    /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
    # 查看启动情况
    ps -ef | grep storage
    #一定要启动!!

     4.ideal 编写代码测试

    #1 pom导包

    server {
    listen 80;
    server_name 192.168.42.200;
    location /group1/M00/{
    ngx_fastdfs_module;
    }
    }
    server {
    listen 8888;
    server_name 192.168.42.200;
    location / {
    root html;
    index index.html index.htm;
    }
    }
    }
    ===========================================
    # 启动 nginx
    cd /usr/local/nginx/sbin/
    ./nginx -c /usr/local/nginx/conf/nginx.conf
    # 最后浏览器访问地址 查看效果
    #后面的地址是你idea测试上传后的地址  nginx默认端口80
    http://192.168.64.138/group1/M00/00/00/wKhAimLZK2yABU5GAABRh_-wc7A040.jpg

     


     第二种方式 springboot整合fdfs

    1.导入pom依赖

    
        1.8
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
    
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.projectlombok
            lombok
            true
        
        
            com.github.tobato
            fastdfs-client
            1.26.4
        
    

    2.配置yml

    server:
      port: 9999
    fdfs:
      #读取时间
      so-timeout: 3000
      #连接超时时间
      connect-timeout: 1000
      #缩略图
      thumb-image:
        width: 150
        height: 150
        #服务器地址
      tracker-list:
        - 192.168.64.138:22122
    

    3.编写配置类FastDFSConfiguration

    @Configuration
    @Import(FdfsClientConfig.class)
    @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)//可以不写
    public class FastDFSConfiguration {
    }
    

    4.编写测试类 启动

    @SpringBootTest
    class MyfastdfsApplicationTests {
        @Resource
        private FastFileStorageClient ffsc;
    
        @Test
        void contextLoads() throws Exception{
            //读取图片
            FileInputStream fis = new FileInputStream("d:/a.jpeg");
            //进行图片上传
            StorePath sp = ffsc.uploadFile(fis, fis.available(), "jpeg", null);
            //打印访问后的地址
            System.out.println(sp.getFullPath());
        }
    }

    # 最后浏览器访问地址 查看效果
    #后面的地址是你idea测试上传后的地址  nginx默认端口80
    http://192.168.64.138/group1/M00/00/00/wKhAimLZK2yABU5GAABRh_-wc7A040.jpg


      第三种方式 springboot整合fdfs进入项目整合(和第二种差不多)

    1.导入pom依赖

    
        5.1.38
        3.4.2
        1.1.9
        3.0.5
        1.26.4
        1.2.83
        2.9.2
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
            mysql
            mysql-connector-java
        
        
            com.baomidou
            mybatis-plus-boot-starter
            ${mybatis-plus.version}
        
        
            com.alibaba
            druid-spring-boot-starter
            ${druid.version}
        
        
            org.projectlombok
            lombok
        
        
        
            com.alibaba
            easyexcel
            ${easyexcel.version}
        
        
            net.oschina.zcx7878
            fastdfs-client-java
            1.27.0.0
        
        
            com.github.tobato
            fastdfs-client
            ${fastdss.verson}
        
        
            junit
            junit
            4.13.1
        
        
            com.alibaba
            fastjson
            ${fastjson.version}
        
        
            io.springfox
            springfox-swagger2
            ${swagger.version}
        
        
            io.springfox
            springfox-swagger-ui
            ${swagger.version}
        
        
            org.springframework.boot
            spring-boot-starter-websocket
        
    
    

    2.配置yml

    server:
      port: 9090
    spring:
      application:
        name: tc_manager
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.64.138:8848
            username: nacos
            password: nacos
            namespace: public
      datasource:
        druid:
          url: jdbc:mysql://192.168.64.138:3306/tc_towercrane?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&autoReconnect=true
          username: root
          password: 3090_Cmok
          #初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
          initial-size: 3
          max-active: 30
          min-idle: 3
          #  datasource:
          #    # druid连接池
          #    type: com.alibaba.druid.pool.DruidDataSource
          #    #数据库驱动
          #    driver: com.mysql.jdbc.Driver
          #    #最大连接池数量
          #    max-active: 20
          #    #初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
          #    initial-size: 10
          # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,
          # 并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
          max-wait: 60000
          #最小连接池数量
    
          #有两个含义:
          #1: Destroy线程会检测连接的间隔时间
          #2: testWhileIdle的判断依据,详细看testWhileIdle属性的说明
          time-between-eviction-runs-millis: 60000
          #配置一个连接在池中最小生存的时间,单位是毫秒
          min-evictable-idle-time-millis: 180000
          #用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。
          validation-query: select 'x'
          #连接有效性检查的超时时间 1 秒
          validation-query-timeout: 1
          #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
          test-on-borrow: false
          #设置从连接池获取连接时是否检查连接有效性,true时,如果连接空闲时间超过minEvictableIdleTimeMillis进行检查,否则不检查;false时,不检查
          test-while-idle: true
          #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
          test-on-return: false
          #是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
          pool-prepared-statements: true
          #要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,
          # 不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
          max-open-prepared-statements: 20
          #数据库链接超过3分钟开始关闭空闲连接 秒为单位
          remove-abandoned-timeout: 1800
          #对于长时间不使用的连接强制关闭
          remove-abandoned: true
          #打开后,增强timeBetweenEvictionRunsMillis的周期性连接检查,minIdle内的空闲连接,
          # 每次检查强制验证连接有效性. 参考:https://github.com/alibaba/druid/wiki/KeepAlive_cn
          keep-alive: true
          # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
          connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
          #是否超时关闭连接 默认为false ,若为true 就算数据库恢复连接,也无法连接上
          break-after-acquire-failure: false
          #设置获取连接出错时的自动重连次数
          connection-error-retry-attempts: 1
          # 设置获取连接出错时是否马上返回错误,true为马上返回
          fail-fast: true
          #属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:
          #监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
          filters: stat,wall
    mybatis-plus:
      mapper-locations: classpath:mapper/*.xml
    #注意顶格
    fdfs:
    #连接时间
      so-timeout: 3000
    #超时时间
      connect-timeout: 1000
    #缩略图
      thumb-image:
        width: 200
        height: 200
    #服务地址
      tracker-list:
        - 192.168.64.138:22122

    3.编写配置类 MyBatisConfiguration

    @Configuration
    @Import(FdfsClientConfig.class)//注册fastdfs服务器工具类
    public class MyBatisConfiguration {
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor(){
            MybatisPlusInterceptor plugs = new MybatisPlusInterceptor();
            plugs.addInnerInterceptor(new PaginationInnerInterceptor());
            return plugs;
            }
    }
    

     4.配置controller层  实体类

    @Api()
    @RestController
    @RequestMapping("/tcinfo")
    public class TcinfosCtrl {
        @Resource
        private TcinfoStoreService tcinfoStoreService;
    /**
     * 8 吊塔附件上传 功能
     * @param tap
     * @param file
     * @return
     */
    @PostMapping("/uploadTcAppendix")
    //因为上传会有2种协议 前端不能同时发送 所以实体类用string来接
    public String uploadAppendix(@RequestParam("tap") String tap,@RequestParam("file") MultipartFile file){
            //在把获取的string 转为实体类
        TcAppendix tcap = JSON.parseObject(tap, TcAppendix.class);
        String filename = tcinfoStoreService.uploadAppenddix(tcap, file);
        return filename;
    
    }

    }

    #实体类TcAppendix

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    public class TcAppendix {
        @TableId(type = IdType.AUTO)
        private Long penid;
        private Long tcid;
        @JsonFormat(pattern="yyyy-MM-dd")
        @DateTimeFormat("yyyy-MM-dd")
        private Date pendate;
        private String penphoto;
        private String pentype;
    }
    

    答案就在上面分成2个@RequestParam!!! 

    5.配置service接口 实现类

    //接口
    public interface TcinfoStoreService {
        /**
         * 用户上传图片到图片服务器 并返回图片服务器返回的base64图片地址
         * @param file
         * @return
         */
        String uploadAppenddix(TcAppendix tcAppendix,MultipartFile file);

    //实现类

    @Service
    public class TcinfoStoreServiceImpl implements TcinfoStoreService {
        @Resource
        private FastFileStorageClient ffsc;
        @Resource
        private TcappendixMapper tcappendixMapper;
    
    
    
        @Override
        public String uploadAppenddix(TcAppendix tap, MultipartFile file) {
            //FilenameUtils.getExtension 工具获取文件尾名
            StorePath sp = null;
            try {
                //第一步先把上传的文件 上传给fastdfs服务器
                InputStream is = file.getInputStream();
    //第一个参数是流 第二个是大小 第三个是文件后缀
                sp = ffsc.uploadFile(is, is.available(), FilenameUtils.getExtension(file.getOriginalFilename()), null);
                //第二步 再把fastdfs返回的base64图片名填充到tap对象中
                tap.setPenphoto(sp.getFullPath());
                //第三步 再把对象存放到数据库
                tcappendixMapper.insert(tap);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return sp.getFullPath();
        }
    }

    6.mapper层

    @Mapper
    //实现mybatis-plus 接口实现CRUD
    public interface TcappendixMapper extends BaseMapper {
    }
    

     完成 测试接口即可!!!!

     

  • 相关阅读:
    二叉树非递归遍历
    torchvision详细介绍
    docker-compose内网本地安装
    MATLAB基础应用精讲-【数模应用】事后多重比较
    THREE.JS实现看房自由(VR看房)
    Python - Windows下使用Python脚本同步一个文件夹下的所有文件到另一个文件夹下
    day14网络编程
    Middleware ❀ Hadoop功能与使用详解(HDFS+YARN)
    三对角矩阵原理及C++实现
    二维卷积输出特征图的计算公式
  • 原文地址:https://blog.csdn.net/just_learing/article/details/125904678