• springboot +fastdfs 上传文件到到云服务器


    fastdfs在云服务器的搭建和配置:https://blog.csdn.net/qq_41592652/article/details/104006289

    springboot结构如下:

    application.properties配置如下:

    server.port=8080
    #单个文件最大尺寸(设置100)
    spring.servlet.multipart.max-file-size=100MB
    #一个请求文件的最大尺寸
    spring.servlet.multipart.max-request-size=100MB
    #设置一个文件上传的临时文件目录
    spring.servlet.multipart.location=/root/temp
    #读取inputsream阻塞时间
    fdfs.connect-timeout=600
    fdfs.so-timeout=1500
    #tracker地址
    fdfs.trackerList=106.12.120.191:22122 
    #缩略图配置
    fdfs.thumbImage.height=150
    fdfs.thumbImage.width=150
    spring.jmx.enabled=false
    #通过nginx 访问地址
    fdfs.resHost=106.12.120.191
    #storage对应的端口
    fdfs.storagePort=23000
    #获取连接池最大数量
    fdfs.pool.max-total=200 

    pom.xml配置如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.3.BUILD-SNAPSHOT</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.whizen</groupId>
        <artifactId>file</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>file</name>
        <description>Demo project for Spring Boot</description>
        <packaging>war</packaging>
    
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>
            <dependency>
                <groupId>com.github.tobato</groupId>
                <artifactId>fastdfs-client</artifactId>
                <version>1.26.1-RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
            <finalName>root</finalName>
        </build>
    </project>

    FdfsConfig类如下:

    package com.whizen.file.configure;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    /**
     * FdfsConfig主要用以连接fastdfs,FdfsConfiguration使配置生效
     */
    @Component
    public class FdfsConfig {
        @Value("${fdfs.resHost}")
        private String resHost;
    
        @Value("${fdfs.storagePort}")
        private String storagePort;
    
        public String getResHost() {
            return resHost;
        }
    
        public void setResHost(String resHost) {
            this.resHost = resHost;
        }
    
        public String getStoragePort() {
            return storagePort;
        }
    
        public void setStoragePort(String storagePort) {
            this.storagePort = storagePort;
        }
    
    }

    FdfsConfiguration类如下:

    package com.whizen.file.configure;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.EnableMBeanExport;
    import org.springframework.jmx.support.RegistrationPolicy;
    
    @Configuration
    @EnableMBeanExport(registration= RegistrationPolicy.IGNORE_EXISTING)
    public class FdfsConfiguration {
    
    }

    ComonFileUtil类如下:

    package com.whizen.file.configure;
    
    import com.github.tobato.fastdfs.domain.MateData;
    import com.github.tobato.fastdfs.domain.StorePath;
    import com.github.tobato.fastdfs.exception.FdfsUnsupportStorePathException;
    import com.github.tobato.fastdfs.service.FastFileStorageClient;
    import org.apache.commons.io.FilenameUtils;
    import org.apache.commons.lang3.StringUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.*;
    import java.nio.charset.Charset;
    import java.util.Set;
    
    @Component
    public class CommonFileUtil {
    
        private final Logger logger = LoggerFactory.getLogger(FdfsConfig.class);
    
        @Autowired
        private FastFileStorageClient storageClient;
    
    
        /**
         *    MultipartFile类型的文件上传ַ
         * @param file
         * @return
         * @throws IOException
         */
        public String uploadFile(MultipartFile file) throws IOException {
            StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(),
                    FilenameUtils.getExtension(file.getOriginalFilename()), null);
            return getResAccessUrl(storePath);
        }
    
        /**
         * 普通的文件上传
         *
         * @param file
         * @return
         * @throws IOException
         */
        public String uploadFile(File file) throws IOException {
            FileInputStream inputStream = new FileInputStream(file);
            StorePath path = storageClient.uploadFile(inputStream, file.length(),
                    FilenameUtils.getExtension(file.getName()), null);
            return getResAccessUrl(path);
        }
    
        /**
         * 带输入流形式的文件上传
         *
         * @param is
         * @param size
         * @param fileName
         * @return
         */
        public String uploadFileStream(InputStream is, long size, String fileName) {
            StorePath path = storageClient.uploadFile(is, size, fileName, null);
            return getResAccessUrl(path);
        }
    
        /**
         * 将一段文本文件写到fastdfs的服务器上
         *
         * @param content
         * @param fileExtension
         * @return
         */
        public String uploadFile(String content, String fileExtension) {
            byte[] buff = content.getBytes(Charset.forName("UTF-8"));
            ByteArrayInputStream stream = new ByteArrayInputStream(buff);
            StorePath path = storageClient.uploadFile(stream, buff.length, fileExtension, null);
            return getResAccessUrl(path);
        }
    
        /**
         * 返回文件上传成功后的地址名称ַ
         * @param storePath
         * @return
         */
        private String getResAccessUrl(StorePath storePath) {
            String fileUrl = storePath.getFullPath();
            return fileUrl;
        }
    
        /**
         * 删除文件
         * @param fileUrl
         */
        public void deleteFile(String fileUrl) {
            if (StringUtils.isEmpty(fileUrl)) {
                return;
            }
            try {
                StorePath storePath = StorePath.praseFromUrl(fileUrl);
                storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
            } catch (FdfsUnsupportStorePathException e) {
                logger.warn(e.getMessage());
            }
        }
    
        public String upfileImage(InputStream is, long size, String fileExtName, Set<MateData> metaData) {
            StorePath path = storageClient.uploadImageAndCrtThumbImage(is, size, fileExtName, metaData);
            return getResAccessUrl(path);
        }
    
    }

    fileControll控制类如下:

    package com.whizen.file.controller;
    
    import com.whizen.file.configure.CommonFileUtil;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.IOException;
    
    @Controller
    public class fileControll {
        private final static Logger logger = LoggerFactory.getLogger(fileControll.class);
    
        @Autowired
        private CommonFileUtil fileUtil;
        @CrossOrigin
        @ResponseBody
        @RequestMapping("/fileup")
        public String uoloadFileToFast(@RequestParam("file") MultipartFile file) throws IOException {
    
            if(file.isEmpty()){
                System.out.println("文件不存在");
            }
            String path = fileUtil.uploadFile(file);
            System.out.println(path);
            return "success";
        }
    }

    启动类配置:

    package com.whizen.file;
    
    import com.github.tobato.fastdfs.FdfsClientConfig;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
    import org.springframework.context.annotation.Import;
    
    @SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
    @Import(FdfsClientConfig.class)
    public class FileApplication extends SpringBootServletInitializer {
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(FileApplication.class);
        }
    
        public static void main(String[] args) {
            SpringApplication.run(FileApplication.class, args);
        }
    
    }

    然后发布到服务器:

    ok。

    
    
  • 相关阅读:
    vue全局组件
    flex布局space-between最后一行左对齐
    css揭秘-不规则投影filter: drop-shadow
    box-shadow实现多重边框和outline实现虚线叠加边框
    css揭秘--避免不必要的媒体查询
    Python之集合set
    Python之序列(str、list、tuple)小结
    Mac查看关闭MongoDB
    flex布局之---左右两侧固定中间自适应伸缩
    PHP进阶之路
  • 原文地址:https://www.cnblogs.com/mcfeng/p/12206409.html
Copyright © 2020-2023  润新知