• 第2-3-2章 环境搭建-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss


    5. 文件服务开发

    全套代码及资料全部完整提供,点此处下载

    5.1 环境搭建

    5.1.1 数据库环境搭建

    第一步:创建pd_files数据库

    create database pd_files character set utf8mb4;
    

    第二步:在pd_files数据库中创建pd_attachment和pd_file数据表

    CREATE TABLE `pd_attachment` (
      `id` bigint(20) NOT NULL COMMENT 'ID',
      `biz_id` varchar(64) DEFAULT NULL COMMENT '业务ID',
      `biz_type` varchar(255) DEFAULT NULL COMMENT '业务类型\n#AttachmentType',
      `data_type` varchar(255) DEFAULT 'IMAGE' COMMENT '数据类型\n#DataType{DIR:目录;IMAGE:图片;VIDEO:视频;AUDIO:音频;DOC:文档;OTHER:其他}',
      `submitted_file_name` varchar(255) DEFAULT '' COMMENT '原始文件名',
      `group_` varchar(255) DEFAULT '' COMMENT 'FastDFS返回的组\n用于FastDFS',
      `path` varchar(255) DEFAULT '' COMMENT 'FastDFS的远程文件名\n用于FastDFS',
      `relative_path` varchar(255) DEFAULT '' COMMENT '文件相对路径',
      `url` varchar(255) DEFAULT '' COMMENT '文件访问链接\n需要通过nginx配置路由,才能访问',
      `file_md5` varchar(255) DEFAULT NULL COMMENT '文件md5值',
      `context_type` varchar(255) DEFAULT '' COMMENT '文件上传类型\n取上传文件的值',
      `filename` varchar(255) DEFAULT '' COMMENT '唯一文件名',
      `ext` varchar(64) DEFAULT '' COMMENT '后缀\n (没有.)',
      `size` bigint(20) DEFAULT '0' COMMENT '大小',
      `org_id` bigint(20) DEFAULT NULL COMMENT '组织ID\n#c_core_org',
      `icon` varchar(64) DEFAULT '' COMMENT '图标',
      `create_month` varchar(10) DEFAULT NULL COMMENT '创建年月\n格式:yyyy-MM 用于统计',
      `create_week` varchar(10) DEFAULT NULL COMMENT '创建时处于当年的第几周\nyyyy-ww 用于统计',
      `create_day` varchar(12) DEFAULT NULL COMMENT '创建年月日\n格式: yyyy-MM-dd 用于统计',
      `create_time` datetime DEFAULT NULL COMMENT '创建时间',
      `create_user` bigint(11) DEFAULT NULL COMMENT '创建人',
      `update_time` datetime DEFAULT NULL COMMENT '最后修改时间',
      `update_user` bigint(11) DEFAULT NULL COMMENT '最后修改人',
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='附件';
    
    
    CREATE TABLE `pd_file` (
      `id` bigint(20) NOT NULL COMMENT '主键',
      `data_type` varchar(255) DEFAULT 'IMAGE' COMMENT '数据类型\n#DataType{DIR:目录;IMAGE:图片;VIDEO:视频;AUDIO:音频;DOC:文档;OTHER:其他}',
      `submitted_file_name` varchar(255) DEFAULT '' COMMENT '原始文件名',
      `tree_path` varchar(255) DEFAULT ',' COMMENT '父目录层级关系',
      `grade` int(11) DEFAULT '1' COMMENT '层级等级\n从1开始计算',
      `is_delete` bit(1) DEFAULT b'0' COMMENT '是否删除\n#BooleanStatus{TRUE:1,已删除;FALSE:0,未删除}',
      `folder_id` bigint(20) DEFAULT '0' COMMENT '父文件夹ID',
      `url` varchar(1000) DEFAULT '' COMMENT '文件访问链接\n需要通过nginx配置路由,才能访问',
      `size` bigint(20) DEFAULT '0' COMMENT '文件大小\n单位字节',
      `folder_name` varchar(255) DEFAULT '' COMMENT '父文件夹名称',
      `group_` varchar(255) DEFAULT '' COMMENT 'FastDFS组\n用于FastDFS',
      `path` varchar(255) DEFAULT '' COMMENT 'FastDFS远程文件名\n用于FastDFS',
      `relative_path` varchar(255) DEFAULT '' COMMENT '文件的相对路径 ',
      `file_md5` varchar(255) DEFAULT '' COMMENT 'md5值',
      `context_type` varchar(255) DEFAULT '' COMMENT '文件类型\n取上传文件的值',
      `filename` varchar(255) DEFAULT '' COMMENT '唯一文件名',
      `ext` varchar(64) DEFAULT '' COMMENT '文件名后缀 \n(没有.)',
      `icon` varchar(64) DEFAULT '' COMMENT '文件图标\n用于云盘显示',
      `create_month` varchar(10) DEFAULT NULL COMMENT '创建时年月\n格式:yyyy-MM 用于统计',
      `create_week` varchar(10) DEFAULT NULL COMMENT '创建时年周\nyyyy-ww 用于统计',
      `create_day` varchar(12) DEFAULT NULL COMMENT '创建时年月日\n格式: yyyy-MM-dd 用于统计',
      `create_time` datetime DEFAULT NULL COMMENT '创建时间',
      `create_user` bigint(20) DEFAULT NULL COMMENT '创建人',
      `update_time` datetime DEFAULT NULL COMMENT '最后修改时间',
      `update_user` bigint(20) DEFAULT NULL COMMENT '最后修改人',
      `source` varchar(10) DEFAULT 'inner' COMMENT '文件来源:inner, outer',
      PRIMARY KEY (`id`) USING BTREE,
      FULLTEXT KEY `FU_TREE_PATH` (`tree_path`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='文件表';
    

    注:SQL脚本位置为 文件服务/资料/数据库/pd_files.sql

    前面已经提到,本系统的文件服务提供两种类型的服务:
    1、面对应用系统的通用附件服务
    	提供统一的上传接口,屏蔽底层的存储方案(本地存储、FastDFS、阿里云存储、七牛云存储等),可独立运行服务。上传的文件相关信息保存在pd_attachment表中。
    2、面对用户的网盘服务
    	提供统一的上传接口,屏蔽底层的存储方案,有文件夹和文件的概念,支持大文件分片上传、断点续传。上传的文件相关信息保存在pd_file表中。
    

    pd_attachment表为附件表,具体表结构如下:

    pd_file表为文件/文件夹信息表,具体表结构如下:

    5.1.2 Nacos环境搭建

    第一步:安装Nacos并进行配置(略)

    第二步:在Nacos中创建命名空间fileService(名字随便起,只要和程序里配置的一样就可以)

    第三步:在Nacos中将配置文件导入到file-server命名空间

    在这里插入图片描述

    注:yml配置文件位置为 文件服务/资料/Nacos/nacos_config_export_2020-04-30 11_47_56.zip

    5.1.3 Nginx环境搭建

    当文件存储策略为本地存储或者FastDFS存储时,需要使用Nginx服务来对外提供文件的下载和查看等功能。

    第一步:安装Nginx(略)

    第二步:配置Nginx_HOME/conf/nginx.conf

    注:可参照 文件服务/资料/Nginx/nginx.conf 进行配置

    在这里插入图片描述

    5.1.4 maven工程环境搭建

    说明:本项目的开发并不是从零开始搭建开发环境,而是在一个名为品达通用权限系统的基础上进行文件服务的开发。品达通用权限系统是传智播客提供的一个开发平台(脚手架),其中提供了一系列的基础组件并且已经实现了权限管理、认证、鉴权、JWT解析等功能。用户可以在此平台基础上开发自己的业务功能。

    品达通用权限系统位置: 文件服务/资料/初始工程(脚手架)/pinda-authority

    具体搭建过程:

    第一步:导入品达通用权限系统到IDEA并修改pd-apps模块中的pom.xml文件

    
    <profile>
        <id>devid>
        <activation>
            
            <activeByDefault>trueactiveByDefault>
        activation>
        <properties>
            
            <pom.profile.name>devpom.profile.name>
            
            <pom.nacos.ip>127.0.0.1pom.nacos.ip>
            <pom.nacos.port>8848pom.nacos.port>
            
            <pom.nacos.namespace>
                53c655b3-babd-4402-82f1-33b7e4c90111
            pom.nacos.namespace>
        properties>
    profile>
    

    第二步:在品达通用权限系统平台基础之上创建文件服务对应的maven工程pd-file

    在这里插入图片描述

    第三步:在pd-file下创建pd-file-entity子模块并配置pom.xml文件

    
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                                 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>pd-fileartifactId>
            <groupId>com.itheimagroupId>
            <version>1.0.0version>
        parent>
        <modelVersion>4.0.0modelVersion>
        <artifactId>pd-file-entityartifactId>
        <description>文件服务实体模块description>
        <dependencies>
            <dependency>
                <groupId>com.itheimagroupId>
                <artifactId>pd-tools-commonartifactId>
            dependency>
            <dependency>
                <groupId>io.springfoxgroupId>
                <artifactId>springfox-coreartifactId>
            dependency>
            <dependency>
                <groupId>com.baomidougroupId>
                <artifactId>mybatis-plusartifactId>
            dependency>
        dependencies>
    project>
    

    第四步:将文件服务相关的实体类、DTO、domain等导入pd-file-entity中

    在这里插入图片描述

    注:文件服务相关实体类位置 文件服务/资料/文件服务相关实体类

    第五步:在pd-file下创建pd-file-server子模块并配置pom.xml文件

    
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                                 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>pd-fileartifactId>
            <groupId>com.itheimagroupId>
            <version>1.0.0version>
        parent>
        <modelVersion>4.0.0modelVersion>
        <artifactId>pd-file-serverartifactId>
        <description>文件服务启动模块description>
        <dependencies>
            <dependency>
                <groupId>com.itheimagroupId>
                <artifactId>pd-auth-apiartifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-openfeignartifactId>
                <exclusions>
                    <exclusion>
                        <groupId>com.google.guavagroupId>
                        <artifactId>guavaartifactId>
                    exclusion>
                exclusions>
            dependency>
            <dependency>
                <groupId>com.itheimagroupId>
                <artifactId>pd-tools-logartifactId>
            dependency>
            <dependency>
                <groupId>com.itheimagroupId>
                <artifactId>pd-tools-swagger2artifactId>
            dependency>
            <dependency>
                <groupId>com.itheimagroupId>
                <artifactId>pd-tools-validatorartifactId>
            dependency>
            <dependency>
                <groupId>com.itheimagroupId>
                <artifactId>pd-tools-xssartifactId>
            dependency>
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
                <exclusions>
                    <exclusion>
                        <artifactId>fastjsonartifactId>
                        <groupId>com.alibabagroupId>
                    exclusion>
                    <exclusion>
                        <groupId>com.google.guavagroupId>
                        <artifactId>guavaartifactId>
                    exclusion>
                exclusions>
            dependency>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-netflix-hystrixartifactId>
                <exclusions>
                    <exclusion>
                        <groupId>com.google.guavagroupId>
                        <artifactId>guavaartifactId>
                    exclusion>
                exclusions>
            dependency>
            <dependency>
                <groupId>org.ow2.asmgroupId>
                <artifactId>asmartifactId>
                <version>${asm.version}version>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.tomcat.embedgroupId>
                        <artifactId>tomcat-embed-websocketartifactId>
                    exclusion>
                    <exclusion>
                        <groupId>org.springframework.bootgroupId>
                        <artifactId>spring-boot-starter-tomcatartifactId>
                    exclusion>
                exclusions>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-undertowartifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-aopartifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-actuatorartifactId>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-jsonartifactId>
            dependency>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
                <scope>testscope>
            dependency>
            <dependency>
                <groupId>com.itheimagroupId>
                <artifactId>pd-file-entityartifactId>
                <version>1.0.0version>
            dependency>
            <dependency>
                <groupId>com.itheimagroupId>
                <artifactId>pd-tools-databasesartifactId>
            dependency>
            <dependency>
                <groupId>com.itheimagroupId>
                <artifactId>pd-tools-dozerartifactId>
            dependency>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-contextartifactId>
            dependency>
            <dependency>
                <groupId>com.baomidougroupId>
                <artifactId>mybatis-plus-boot-starterartifactId>
            dependency>
            
            <dependency>
                <groupId>com.aliyun.ossgroupId>
                <artifactId>aliyun-sdk-ossartifactId>
            dependency>
            
            <dependency>
                <groupId>com.qiniugroupId>
                <artifactId>qiniu-java-sdkartifactId>
            dependency>
            
            <dependency>
                <groupId>com.github.tobatogroupId>
                <artifactId>fastdfs-clientartifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-configuration-processorartifactId>
                <optional>trueoptional>
                <scope>compilescope>
            dependency>
        dependencies>
        <build>
            <resources>
                <resource>
                    <directory>src/main/resourcesdirectory>
                    <filtering>truefiltering>
                resource>
            resources>
            <plugins>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackagegoal>
                            goals>
                        execution>
                    executions>
                plugin>
            plugins>
        build>
    project>
    

    第六步:导入配置文件到pd-file-server中

    在这里插入图片描述

    注:文件服务相关配置文件位置: 文件服务/资料/文件服务相关配置文件

    第七步:在pd-file-server中创建启动类

    package com.itheima.pinda;
    
    import com.itheima.pinda.validator.config.EnableFormValidator;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.netflix.hystrix.EnableHystrix;
    import org.springframework.cloud.openfeign.EnableFeignClients;
    import org.springframework.context.ConfigurableApplicationContext;
    import org.springframework.core.env.Environment;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableHystrix
    @EnableFeignClients(value = {
            "com.itheima.pinda",
    })
    @EnableTransactionManagement
    @Slf4j
    @EnableFormValidator
    public class FileServerApplication {
        public static void main(String[] args) throws UnknownHostException {
            ConfigurableApplicationContext application = SpringApplication.run(FileServerApplication.class, args);
            Environment env = application.getEnvironment();
            log.info("\n----------------------------------------------------------\n\t" +
                            "应用 '{}' 运行成功! 访问连接:\n\t" +
                            "Swagger文档: \t\thttp://{}:{}/doc.html\n\t" +
                            "数据库监控: \t\thttp://{}:{}/druid\n" +
                            "----------------------------------------------------------",
                    env.getProperty("spring.application.name"),
                    InetAddress.getLocalHost().getHostAddress(),
                    env.getProperty("server.port"),
                    "127.0.0.1",
                    env.getProperty("server.port"));
    
        }
    }
    

    第八步:将配置类导入pd-file-server中

    在这里插入图片描述

    注:文件服务相关配置类位置: 文件服务/资料/文件服务配置类

    第九步:在pd-file-server中导入工具类
    在这里插入图片描述

    注:文件服务相关工具类位置: 文件服务/资料/文件服务工具类

    第十步:在pd-file-server中导入配置属性类
    在这里插入图片描述

    注:文件服务相关配置属性类位置: 文件服务/资料/文件服务配置属性类

    第十一步:在pd-file-server中导入Mapper接口

    在这里插入图片描述

    注:文件服务相关Mapper接口位置: 文件服务/资料/文件服务相关Mapper接口

    全套代码及资料全部完整提供,点此处下载

  • 相关阅读:
    神经网络的图像识别技术,神经网络图像角度分析
    缓存&PWA实践
    java-jni 十进制转十六进制应用,根据基址获取包裹首地址
    结构型设计模式07-享元模式
    22、Java基础(spring注解@PathVariable和@RequsetParam的区别还有@RequestBody)
    MySQL是如何保证数据不丢失的
    S32K1xx的MBD工具箱加载及激活
    从零开始的vscode配置及安装rust教程
    整合SSM(Mybatis-Spring-SpringMVC层)
    【Google】“共码未来“—2022谷歌开发者大会参会记录
  • 原文地址:https://www.cnblogs.com/gitBook/p/16891166.html