实战:使用FastDFS进行文件上传

使用FastDFS进行文件上传

导航

  • 使用FastDFS进行文件上传
    • 一. 步骤如下
      • 1.1 引入pom依赖
      • 1.2 在resources/application.yml中配置:
      • 1.3 引入FastDFS相关的config
      • 1.4 测试FastDFS的相关代码
      • 1.5 改造业务代码

一. 步骤如下

1.1 引入pom依赖

<dependency>
	<groupId>com.github.tobato</groupId>
	<artifactId>fastdfs-client</artifactId>
	<version>${fastDFS.clent.version}</version>
</dependency> 

在SpringBoot内可不定义版本号,跟随SpringBoot

1.2 在resources/application.yml中配置:

fdfs:
	so-timeout:1501  # 读取超时时间
	connect-timeout: 601 #连接超时时间
	thumb-image:  #缩略图
		width: 60
		height: 60
	tracker-list: # tracker地址: 你的虚拟机服务器地址+端口 (默认是22122)
		- 192.16856.10122122

1.3 引入FastDFS相关的config

@Configuration
@Import(FdfsClientConfig.class)
//解决jmx重复注册bean的问题
@EnableMBeanExport(registration=RegistrationPolicy.IGNORE_EXISTING)
public class FastClientImporter{}

这里不需要写代码,因为@Import引入的配置就是别人已经写好的代码,我们就可以不用写东西了;第二个是为了防止Bean重复注入;

1.4 测试FastDFS的相关代码

@SpringBootTest
@RunWith(SpringRunner.class)
public class FastDFSTest{
	@Autowired
	private FastFileStorageClient storageClient;

	@Autowired
	private ThumbImageConfig thumbImageConfig;

	@Test
	public void testUpload() throws FileNotFoundException{
		//要上传的文件
		File file=new File("C:\\USERS\\iamge.jpg")
		//上传并保存图片,参数: 1-上传的文件流  2-文件的大小  3-文件的后缀 4-可以不管他
		StorePath storePath =this.storageClient.uploadFile(new FileInputStream(file),file.length(),"jpg",null);
		//带分组的路径
		System.out.println(storePath.getFullPath());		//group1/M00/00/00/xxxx.jpg
		//不带分组的路径
		System.out.println(storePath.getPath());		//M00/00/00/xxxx.jpg
		//我们在浏览器内访问: 192.168.56.101/group1/M00/00/00/xxxxx.jpg
		//如果配置了域名,则可以通过域名访问,比如:image.baidu.com/group1/M00/00/00/xxxxx.jpg
	}

	//测试生成缩略图
	@Test
	public void testUploadAndCreateThumb() throws FileNotFoundException{
		File file=new File("C:\\Users\\joedy\\Pictures\\xbx1.jpg")
		//上传并且生成缩略图
		StorePath storePath=this.storageClient.uploadImageAndCrtThumbImage(
			new FileInputStream(file),file.length(),"jpg",null);
		//带分组的路径
		System.out.println(storePath.getFullPath());
		//不带分组的路径
		System.out.println(storePath.getPath());
		//获取缩略图路径
		String path=thumbImageConfig.getThumbImagePath(storePath.getPath());
		System.out.println(path);
	}	
}

1.5 改造业务代码

@Service
public class UploadService{

	private static final List<String> CONTENT_TYPES=Arrays.asList("image/gif","image/jpeg");
	private static final Logger LOGGER= LoggerFactory.getLogger(UploadService.class);
	
	@Autowired
	private FastFileStorageClient storageClient;
	
	public String uploadImage(MutipartFile file){
		String originalFilename=file.getOriginalFilename();
		//校验文件类型
		String contentType=file.getContentType();
		if(!CONTENT_TYPES.contains(contentType)){
			LOGGER.info("文件类型不合法:{}",originalFilename);		//这里的第二个参数会自动进入{}内
			return null;
		}
		//保存到服务器
		//file.transferTo(new File("C:\\image\\"+originalFilename));   这里是保存到本地磁盘,这里不用这个。
		String ext=StringUtils.substringAfterLast(originalFilename,".");
		StorePath storePath=this.storageClient.uploadFile(file.getInputStream(),file.getSize(),ext,null);
		//返回url,进行回显
		//return "http://image.baidu.com/" + originalFilename;
		return "http://image.baidu.com"+ storePath.getFullPath();
	}catch(IOException e){
		LOGGER.info("服务器内部错误:"+originalFilename);
		e.printStackTrace();
	}
		return null;
}

你可能感兴趣的:(工作常用)