【FastDFS】SpringBoot整合FastDFS实战,我只看这一篇!! (2)

首先,我们在项目的io.mykit.fastdfs.utils包下创建FastDFSClientUtils工具类。这里,我给出工具类的核心实现,其他部分小伙伴们参加源码工程。

/** * @author binghe * @description FastDFS分布式文件系统操作客户端 */ public class FastDFSClientUtils { private static Logger logger = LoggerFactory.getLogger(FastDFSClientUtils.class); private static TrackerClient trackerClient; public static void setFile(String filePath) { try { logger.info("初始化分布式文件系统服务开始..."); if(filePath == null || filePath.trim().isEmpty()) { filePath = "fastdfs_client.conf"; } ClientGlobal.init(filePath); TrackerGroup trackerGroup = ClientGlobal.g_tracker_group; trackerClient = new TrackerClient(trackerGroup); logger.info("初始化分布式文件系统服务完成..."); } catch (Exception e) { logger.error("加载文件异常:{}",e ); } } /** * @param data 数据 * @param extName 文件扩展名 * @return 上传成功返回id,失败返回null */ public static String upload(byte[] data, String extName) { TrackerServer trackerServer = null; StorageServer storageServer = null; StorageClient1 storageClient1 = null; try { NameValuePair[] meta_list = null; // new NameValuePair[0]; trackerServer = trackerClient.getTrackerServer(); if (trackerServer == null) { logger.error("getConnection return null"); } storageServer = trackerClient.getStoreStorage(trackerServer); storageClient1 = new StorageClient1(trackerServer, storageServer); String fileid = storageClient1.upload_file1(data, extName, meta_list); return fileid; } catch (Exception ex) { logger.error("上传文件异常:{}", ex); return null; }finally{ try { storageClient1.close(); } catch (IOException e) { e.printStackTrace(); } storageClient1 = null; } } 创建返回实体类

我们在io.mykit.fastdfs.bean包下创建ResourceBean类,用于SpringBoot接口返回结果数据,如下所示。

/** * @author binghe * @version 1.0.0 * @description 上传图片后的返回数据 */ public class ResourceBean implements Serializable { private static final long serialVersionUID = -2788538880352897307L; /** * 文件的访问路径 */ private String fileUrl; /** * 文件名称 */ private String fileName; public ResourceBean() { super(); } public ResourceBean(String fileUrl, String fileName) { super(); this.fileUrl = fileUrl; this.fileName = fileName; } public String getFileUrl() { return fileUrl; } public void setFileUrl(String fileUrl) { this.fileUrl = fileUrl; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } }

其中,定义了文件的访问路径fileUrl和文件的名称fileName。也就是说,文件上传成功后,我们会向客户端返回文件的访问路径和文件的名称信息。

创建常量类

在io.mykit.fastdfs.constants包下创建ResourcesConstants常量类,ResourcesConstants类中主要定义了访问文件的基础路径和获取文件完整访问路径的方法,如下所示。

/** * @author binghe * @version 1.0.0 * @description 常量 */ public class ResourcesConstants { private static final String BASE_RESOURCES_URL = "http://192.168.175.100/"; public static String getResourcesUrl(String fileId) { return BASE_RESOURCES_URL.concat(fileId); } } 创建Controller类

在项目的io.mykit.fastdfs.controller包下创建ResourceController类,用于定义文件上传的接口。这个类的功能也比较简单,就是定义一个文件上传接口,接收文件,并调用FastDFSClientUtils工具类的upload(byte[], String)方法,将文件上传到FastDFS中,如下所示。

/** * @author binghe * @version 1.0.0 * @description 上传文件接口 */ @RestController @RequestMapping(value = "/resources/") public class ResourceController { @RequestMapping(value={"/upload"}, method=RequestMethod.POST) @ResponseBody public ResourceBean upload(@RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response){ String extName = ""; String fileName = ""; String originalFilename = file.getOriginalFilename(); if(originalFilename.contains(".")) { //拆分文件路径 String[] fileArray = originalFilename.split("\\."); //获取文件扩展名 extName = fileArray[1]; //获取文件名 fileName = fileArray[0]; }else { fileName = originalFilename; } byte[] bytes = null; try { bytes = file.getBytes(); //将文件转换成字节流形式 } catch (IOException e) { e.printStackTrace(); } //调用上传文件的具体方法 String fileId= FastDFSClientUtils.upload(bytes,extName); return new ResourceBean(ResourcesConstants.getResourcesUrl(fileId), fileName); } } 创建启动类

在项目的io.mykit.fastdfs包下,创建项目启动类ResourceStarter,如下所示。

/** * @author binghe * @version 1.0.0 * @description 启动 */ @SpringBootApplication public class ResourceStarter { public static void main(String[] args) { try { String filePath = "fastdfs_client.conf"; if(args.length > 0) { filePath = args[0]; } FastDFSClientUtils.setFile(filePath); SpringApplication.run(ResourceStarter.class, args); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgjjy.html