当前位置: 代码迷 >> 综合 >> SpringBoot 整合 FastDFS 预防tmp系统文件找不到 MultipartFile 对象丢失
  详细解决方案

SpringBoot 整合 FastDFS 预防tmp系统文件找不到 MultipartFile 对象丢失

热度:17   发布时间:2024-01-09 15:48:32.0

SpringBoot 整合 FastDFS 预防tmp系统文件找不到 MultipartFile 对象丢失

  • mavne依赖 这里用的是SpringBoot  2.0.6.RELEASE 选版本时一定要与其匹配
<!--fastDFS-->
<dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId><version>1.26.6</version>
</dependency>
  • yml配置 (在config中会自动读取)
spring:
#################################   ---   file   ---   #################################servlet:multipart:max-file-size: 10MBmax-request-size: 10MBlocation: /data/tmpenabled:  true#################################   ---   fdfs   ---   #################################
fdfs:so-timeout: 1501connect-timeout:  2000thumb-image: # 缩略图width:  150height: 150tracker-list: # tracker地址- 11.53.56.70:22122pool:max-total:  100max-wait-millis:  60
  •  Configuration 配置 @Import(FdfsClientConfig.class) 会读取我们在yml中的配置
  • @Bean 中的配置是修改tmp临时文件路径,配合排除SpringBoot 默认读取MultipartFile配置 , 解决tmp文件找不到问题
import com.github.tobato.fastdfs.FdfsClientConfig;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableMBeanExport;
import org.springframework.context.annotation.Import;
import org.springframework.jmx.support.RegistrationPolicy;import javax.servlet.MultipartConfigElement;
import java.io.File;/*** fastDFS Config By CHENYB date 2019-08-14*/
@Configuration
@Import(FdfsClientConfig.class)//引入前辈封装的配置
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)//解决jmx重复注册bean的问题
public class FastDFSConfig {/*** 设置文件上传临时路径*/@BeanMultipartConfigElement multipartConfigElement() {MultipartConfigFactory factory = new MultipartConfigFactory();String location = System.getProperty("user.dir") + "/data/tmp";File tmpFile = new File(location);if (!tmpFile.exists()) {tmpFile.mkdirs();}factory.setLocation(location);return factory.createMultipartConfig();}
}
  •  启动类排除 MultipartAutoConfiguration 默认配置
@SpringBootApplication(exclude = {MultipartAutoConfiguration.class})

 如果需要开启线程,让然后tmp路径,系统文件找不到问题,需要将文件临时存储指定文件夹,上传钱,读取生成的临时文件,因为MultipartFile 流只允许使用一次,第二次使用时,只为null.所以会有以上问题,只需将MultipartFile流生成临时问价即可;

byte[]流与File互相转换: https://blog.csdn.net/scdncby/article/details/99736558

fastDFS 工具类: https://blog.csdn.net/scdncby/article/details/99738556

注:单线程,以上问题则没有这么复杂

chenyb 随笔记录,只为方便自己学习

2019-08-19

  相关解决方案