Spring Boot(十八):使用Spring Boot集成FastDFS详解编程语言
2023-06-13 09:11:43 时间
Spring Boot(十八):使用Spring Boot集成FastDFS
环境:Spring Boot最新版本1.5.9、jdk使用1.8、tomcat8.0
功能:使用Spring Boot将文件上传到分布式文件系统FastDFS中。
一、pom包配置dependency groupId org.csource /groupId artifactId fastdfs-client-java /artifactId version 1.27-SNAPSHOT /version /dependency
加入了fastdfs-client-java包,用来调用FastDFS相关的API。
二、配置文件resources目录下添加fdfs_client.conf文件:
connect_timeout = 60 network_timeout = 60 charset = UTF-8 http.tracker_http_port = 8080 http.anti_steal_token = no http.secret_key = 123456 tracker_server = 192.168.53.85:22122 tracker_server = 192.168.53.86:22122
配置文件设置了连接的超时时间,编码格式以及tracker_server地址等信息。
三、封装FastDFS上传工具类(1)封装FastDFSFile,文件基础信息包括文件名、内容、文件类型、作者等。
public class FastDFSFile { private String name; private byte[] content; private String ext; private String md5; private String author; //省略getter、setter
封装FastDFSClient类,包含常用的上传、下载、删除等方法。
(2)首先在类加载的时候读取相应的配置信息,并进行初始化。
static { try { String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();; ClientGlobal.init(filePath); trackerClient = new TrackerClient(); trackerServer = trackerClient.getConnection(); storageServer = trackerClient.getStoreStorage(trackerServer); } catch (Exception e) { logger.error("FastDFS Client Init Fail!",e); }
(3)文件上传:
public static String[] upload(FastDFSFile file) { logger.info("File Name: " + file.getName() + "File Length:" + file.getContent().length); NameValuePair[] meta_list = new NameValuePair[1]; meta_list[0] = new NameValuePair("author", file.getAuthor()); long startTime = System.currentTimeMillis(); String[] uploadResults = null; try { storageClient = new StorageClient(trackerServer, storageServer); uploadResults = storageClient.upload_file(file.getContent(), file.getExt(), meta_list); } catch (IOException e) { logger.error("IO Exception when uploadind the file:" + file.getName(), e); } catch (Exception e) { logger.error("Non IO Exception when uploadind the file:" + file.getName(), e); logger.info("upload_file time used:" + (System.currentTimeMillis() - startTime) + " ms"); if (uploadResults == null) { logger.error("upload file fail, error code:" + storageClient.getErrorCode()); String groupName = uploadResults[0]; String remoteFileName = uploadResults[1]; logger.info("upload file successfully!!!" + "group_name:" + groupName + ", remoteFileName:" + " " + remoteFileName); return uploadResults; }
使用FastDFS提供的客户端storageClient来进行文件上传,最后将上传结果返回。
根据groupName和文件名获取文件信息。
public static FileInfo getFile(String groupName, String remoteFileName) { try { storageClient = new StorageClient(trackerServer, storageServer); return storageClient.get_file_info(groupName, remoteFileName); } catch (IOException e) { logger.error("IO Exception: Get File from Fast DFS failed", e); } catch (Exception e) { logger.error("Non IO Exception: Get File from Fast DFS failed", e); return null; }
(4)下载文件:
public static InputStream downFile(String groupName, String remoteFileName) { try { storageClient = new StorageClient(trackerServer, storageServer); byte[] fileByte = storageClient.download_file(groupName, remoteFileName); InputStream ins = new ByteArrayInputStream(fileByte); return ins; } catch (IOException e) { logger.error("IO Exception: Get File from Fast DFS failed", e); } catch (Exception e) { logger.error("Non IO Exception: Get File from Fast DFS failed", e); return null; }
(5)删除文件:
public static void deleteFile(String groupName, String remoteFileName) throws Exception { storageClient = new StorageClient(trackerServer, storageServer); int i = storageClient.delete_file(groupName, remoteFileName); logger.info("delete file successfully!!!" + i); }
使用FastDFS时,直接调用FastDFSClient对应的方法即可。
四、编写上传控制类从MultipartFile中读取文件信息,然后使用FastDFSClient将文件上传到FastDFS集群中。
public String saveFile(MultipartFile multipartFile) throws IOException { String[] fileAbsolutePath={}; String fileName=multipartFile.getOriginalFilename(); String ext = fileName.substring(fileName.lastIndexOf(".") + 1); byte[] file_buff = null; InputStream inputStream=multipartFile.getInputStream(); if(inputStream!=null){ int len1 = inputStream.available(); file_buff = new byte[len1]; inputStream.read(file_buff); inputStream.close(); FastDFSFile file = new FastDFSFile(fileName, file_buff, ext); try { fileAbsolutePath = FastDFSClient.upload(file); //upload to fastdfs } catch (Exception e) { logger.error("upload file Exception!",e); if (fileAbsolutePath==null) { logger.error("upload file failed,please upload again!"); String path=FastDFSClient.getTrackerUrl()+fileAbsolutePath[0]+ "/"+fileAbsolutePath[1]; return path; }
请求控制,调用上面方法saveFile()。
@PostMapping("/upload") //new annotation since 4.3 public String singleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) { if (file.isEmpty()) { redirectAttributes.addFlashAttribute("message", "Please select a file to upload"); return "redirect:uploadStatus"; try { // Get the file and save it somewhere String path=saveFile(file); redirectAttributes.addFlashAttribute("message", "You successfully uploaded " + file.getOriginalFilename() + ""); redirectAttributes.addFlashAttribute("path", "file path url " + path + ""); } catch (Exception e) { logger.error("upload file failed",e); return "redirect:/uploadStatus"; }
上传成功之后,将文件的路径展示到页面,效果图如下:
在浏览器中访问此Url,可以看到成功通过FastDFS展示:
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/16650.html
cjava相关文章
- 玩转 Spring Boot 集成篇(Redis)(四)
- 玩转 Spring Boot 集成篇(@Scheduled、静态、动态定时任务)(七)
- spring boot框架搭建_springboot工作原理
- Spring Boot文件上传
- Spring boot集成海康威视门禁设备
- Spring boot集成RocketMQ
- springboot 集成mybatis-plus_Spring Boot
- 【Spring Boot实战与进阶】集成Kafka消息队列
- Spring Boot集成Disruptor
- Spring Boot 源码解读与原理剖析|文末赠书
- Spring Boot的部署方式(一)
- Spring Data MongoDB 模糊查询详解数据库
- Spring Boot 2.0官方文档之 Actuator详解编程语言
- Spring Boot日志集成实战详解编程语言
- Spring Boot中扩展XML请求和响应的支持详解编程语言
- Spring Boot 2 (八):Spring Boot 集成 Memcached详解编程语言
- Spring Boot(十三):spring boot小技巧详解编程语言
- Spring Boot(六):如何使用mybatis详解编程语言
- spring boot配置mybatis和事务管理详解编程语言
- spring boot 集成 Swagger 接口文档详解编程语言
- Spring Boot 请求返回字符串中文乱码详解编程语言
- Spring Boot 如何快速集成 Redis 哨兵?
- Spring Boot 2 快速教程:WebFlux 集成 Mongodb(四)
- Spring框架致力于搭建基于MSSQL的稳健开发体系(spring mssql)