需求
接到一个单子说是用制作一个简单的HDFS浏览器。
功能包括:基于HDFS的文件浏览、上传和下载。
需求分析
用到的技术包括Java、HDFSAPI、tomcat的配置等
代码实现
项目架构:
Controller层代码:
@Controller @RequestMapping("/hdfs") public class hdfsController { private hdfsService hdfsService; public hdfsService getHdfsService() { return hdfsService; } @Resource public void setHdfsService(hdfsService hdfsService) { this.hdfsService = hdfsService; } @RequestMapping("/delete") public String toDelete(@RequestParam(value="path",required=false) String path) throws IOException{ hdfsService.delete(path); return "success"; } @RequestMapping(value="/ls",method=RequestMethod.GET) public ModelAndView home(@RequestParam(value="path",required=false) String path, HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView model = new ModelAndView(); if (StringUtils.isEmpty(path)) { path = "/"; } List<hdfsBean> hdfsFiles =hdfsService.ls(path); model.addObject("file", hdfsFiles); model.setViewName("/ls"); return model; } @RequestMapping("/download") public String toDownload(@RequestParam(value="path",required=false) String path) throws IOException{ hdfsService.download(path); return "success"; } @RequestMapping(value="/upload") public String upLoad(HttpServletRequest request, HttpServletResponse response) throws IllegalStateException, IOException{ //解析器解析request的上下文 CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); //先判断request中是否包涵multipart类型的数据, if(multipartResolver.isMultipart(request)) { //再将request中的数据转化成multipart类型的数据 MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; Iterator<String> iter = multiRequest.getFileNames(); while(iter.hasNext()) { MultipartFile file = multiRequest.getFile(iter.next()); if(file != null) { String FileName = file.getOriginalFilename(); System.out.println(FileName); CommonsMultipartFile cf= (CommonsMultipartFile)file; DiskFileItem fi = (DiskFileItem)cf.getFileItem(); File inputFile = fi.getStoreLocation(); hdfsService.createFile(inputFile, "hdfs://192.168.88.100:8020/upload/"+FileName); } } } return "success"; }
前端部分页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ page isELIgnored="false" %> <%String ref = request.getHeader("REFERER");%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>HDFS文件管理器</title> </head> <body> <table> <tr> <td>文件名</td> <td>文件大小 </td> <td>拥有者 </td> <td>权限 </td> <td>时间 </td> <td> 操作</td> </tr> <c:forEach var="file" items="${file}"> <tr> <td><a href="${pageContext.request.contextPath}/hdfs/ls.do?path=${file.fileName}" style="color:#666666;text-decoration:none;"> ${file.fileName}</a></td> <td> ${file.fileSize}</td> <td> ${file.owner}</td> <td> ${file.permission}</td> <td> ${file.modificationTime}</td> <td><a href="${pageContext.request.contextPath}/hdfs/delete.do?path=${file.fileName}" style="color:#666666;text-decoration:none;" class="button border-dot button-little" onclick="return confirm('确认删除?')" > 删除 </a> <a href="${pageContext.request.contextPath}/hdfs/download.do?path=${file.fileName}" style="color:#666666;text-decoration:none;"> 下载</a></td> </tr> </c:forEach> <input type="button" value="返回" onclick="javascript:window.location='<%=ref%>'" > </table> </body> </html>
效果演示
HDFS简易Web浏览器
HDFS简易Web浏览器_哔哩哔哩_bilibili
总结
比较轻松的需求,主要是之前做过类似的小项目直接拿来用即可。

