Java校园淘项目实战(三)————Springboot+fastDFS实现文件上传

it2024-11-08  4

上一章节,我们讲了如何在CentOS 8 系统中安装好fastDFS,这一章节,我们就来写上传图片的功能,并且拿到自动生成的缩略图。 (1)在pom.xml中引入相关依赖,我这里的版本是1.26.2

<dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> </dependency>

(2)在yml文件里面配置一下fdfs,指定生成的缩略图为150x150px,其中的tracker-list是踪迹服务器的地址,这个要根据自己的虚拟机地址来写

fdfs: connect-timeout: 1500 so-timeout: 1000 tracker-list: - 192.168.228.132:22122 thumb-image: height: 150 width: 150

(3)写配置类,让其自动配置在IOC容器中

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

(4)接下来写上传功能

/** * 文件上传工具类 */ @Component public class FastDfsUtils { private static String host = "192.168.228.132"; private static String port = "80"; @Autowired private FastFileStorageClient storageClient; /** * 缩略图 */ @Autowired private ThumbImageConfig thumbImageConfig; /** * 上传图片 * * @param file * @return * @throws IOException */ public String uploadFile(MultipartFile file) { //忽略不是图片的内容 if (file == null) { return null; } String contentType = file.getContentType(); List<String> list = Arrays.asList("image/jpeg", "image/png", "image/jpg"); if (!list.contains(contentType)) { return "图片格式错误"; } BufferedImage read = null; try { read = ImageIO.read(file.getInputStream()); } catch (IOException e) { e.printStackTrace(); } if (read == null) { return "图片内容错误"; } //过滤成功后,开始上传文件 StorePath storePath = null; try { storePath = storageClient.uploadImageAndCrtThumbImage((InputStream) file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null); } catch (IOException e) { e.printStackTrace(); } String group = storePath.getGroup(); String path = thumbImageConfig.getThumbImagePath(storePath.getPath()); // http://192.168.228.132:80/xxxx return "http://" + host + ":" + port + "/" + group + "/" + path; } }

这里需要注意一下,必须要得到group才行,因为通过thumbImageConfig.getThumbImagePath(storePath.getPath());得到的路径是没有携带group的,所以需要在storePath里面获取gourp,然后拼接,这样才是完整的路径,在浏览器中访问的时候,不会出错。

(5)在Controller里面写接口

@PostMapping("upload") public ResponseEntity<String> uploadImage(@RequestParam("file") MultipartFile file) { if (file == null) { return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } String s = fastDfsUtils.uploadFile(file); if (s == null) { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } return ResponseEntity.ok(s); }

好了,现在就可以用postman测试一下,经过我的测试,是能够访问的。不知道怎么测试的,自行百度。

最新回复(0)