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: 10MB
max-request-size: 10MB
location: /data/tmp
enabled: true
################################# --- fdfs --- #################################
fdfs:
so-timeout: 1501
connect-timeout: 2000
thumb-image: # 缩略图
width: 150
height: 150
tracker-list: # tracker地址
- 11.53.56.70:22122
pool:
max-total: 100
max-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 {
/**
* 设置文件上传临时路径
*/
@Bean
MultipartConfigElement 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.youkuaiyun.com/scdncby/article/details/99736558
fastDFS 工具类: https://blog.youkuaiyun.com/scdncby/article/details/99738556
注:单线程,以上问题则没有这么复杂
chenyb 随笔记录,只为方便自己学习
2019-08-19