目录
承接上文
我们之前没有使用fastdfs写好了文件上传的代码,博客如下,现在我们要通过fastdfs改造代码了
https://blog.csdn.net/Delicious_Life/article/details/104224846
改造UploadService
package com.leyou.upload.service;
import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
@Service
public class UploadService {
private static final List<String> CONTENT_TYPES = Arrays.asList("image/gif", "image/jpeg", "image/jpg");
private static final Logger LOGGER = LoggerFactory.getLogger(UploadService.class);
@Autowired
private FastFileStorageClient storageClient;
public String uploadImage(MultipartFile file) {
String originalFilename = file.getOriginalFilename();
//校验文件类型
String contentType = file.getContentType();
if(!CONTENT_TYPES.contains(contentType)) {
LOGGER.info("文件类型不合法: {}", originalFilename);
return null;
}
//校验文件内容
try {
BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
if(bufferedImage == null) {
LOGGER.info("文件内容不合法: {}", originalFilename);
return null;
}
//保存到服务器
//file.transferTo(new File("G:\\software\\FastDFS\\image\\" + originalFilename));
String ext = StringUtils.substringAfterLast(originalFilename, ".");
StorePath storePath = this.storageClient.uploadFile(file.getInputStream(), file.getSize(), ext, null);
//返回url,进行回显
return "http://image.leyou.com/" + storePath.getFullPath();
} catch (IOException e) {
LOGGER.info("服务器内部错误: " + originalFilename);
e.printStackTrace();
}
return null;
}
}
测试
首先重启Item微服务项目
然后新增品牌
可以看到点击提交后效果如下
接下来我们再次看看在数据库中这张图片的url是怎么存的
通过使用FastDFS客户端,极大的减少了我们修改的代码量,同时,这张图片也同步页面的实践存储到了位于虚拟机上的FastDFS服务器中,可供数据库调用~