SSM框架展示HDFS文件列表,上传文件,删除文件,下载文件前后端代码

时间: 2023-08-31 12:31:11 浏览: 75
### 回答1: 后端代码: 1. HDFS文件列表展示 首先需要引入Hadoop的依赖,然后在代码中连接HDFS,获取文件列表并返回给前端。 ```java @Controller @RequestMapping("/hdfs") public class HdfsController { private static final String HDFS_PATH = "hdfs://localhost:9000"; @RequestMapping("/list") @ResponseBody public List<String> list(@RequestParam(name = "path", defaultValue = "/") String path) throws Exception { Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration); Path hdfsPath = new Path(path); RemoteIterator<LocatedFileStatus> iterator = fileSystem.listFiles(hdfsPath, false); List<String> fileList = new ArrayList<>(); while (iterator.hasNext()) { LocatedFileStatus fileStatus = iterator.next(); String filePath = fileStatus.getPath().toString(); fileList.add(filePath); } fileSystem.close(); return fileList; } } ``` 2. HDFS文件上传 在上传文件之前需要先判断目标路径是否存在,如果不存在则需要先创建目录。然后就可以通过输入流将本地文件上传到HDFS中。 ```java @RequestMapping("/upload") @ResponseBody public String upload(@RequestParam("file") MultipartFile file, @RequestParam(name = "path", defaultValue = "/") String path) throws Exception { Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration); Path hdfsPath = new Path(path); if (!fileSystem.exists(hdfsPath)) { fileSystem.mkdirs(hdfsPath); } String fileName = file.getOriginalFilename(); InputStream inputStream = file.getInputStream(); OutputStream outputStream = fileSystem.create(new Path(hdfsPath, fileName)); IOUtils.copy(inputStream, outputStream); fileSystem.close(); return "success"; } ``` 3. HDFS文件删除 在删除文件之前需要先判断目标路径是否存在,如果不存在则无法删除。然后就可以通过文件系统的delete方法将目标文件删除。 ```java @RequestMapping("/delete") @ResponseBody public String delete(@RequestParam(name = "path") String path) throws Exception { Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration); Path hdfsPath = new Path(path); if (!fileSystem.exists(hdfsPath)) { return "file not exists"; } fileSystem.delete(hdfsPath, true); fileSystem.close(); return "success"; } ``` 4. HDFS文件下载 在下载文件之前需要先判断目标路径是否存在,如果不存在则无法下载。然后就可以通过文件系统的open方法获取文件的输入流,然后通过输出流将文件下载到本地。 ```java @RequestMapping("/download") public void download(@RequestParam(name = "path") String path, HttpServletResponse response) throws Exception { Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration); Path hdfsPath = new Path(path); if (!fileSystem.exists(hdfsPath)) { throw new FileNotFoundException("file not found"); } FSDataInputStream inputStream = fileSystem.open(hdfsPath); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=" + path.substring(path.lastIndexOf("/") + 1)); OutputStream outputStream = response.getOutputStream(); IOUtils.copy(inputStream, outputStream); fileSystem.close(); } ``` 前端代码: 1. HDFS文件列表展示 通过ajax请求获取后端接口返回的文件列表,然后将列表展示在页面上。 ```javascript $(document).ready(function () { loadFileList("/"); }); function loadFileList(path) { $.ajax({ url: "/hdfs/list", type: "get", dataType: "json", data: { "path": path }, success: function (data) { var fileList = $("#fileList"); fileList.empty(); for (var i = 0; i < data.length; i++) { var file = data[i]; var fileName = file.substring(file.lastIndexOf("/") + 1); var li = $("<li class='list-group-item'></li>"); if (file.indexOf(".") >= 0) { var icon = $("<i class='fa fa-file'></i>"); } else { var icon = $("<i class='fa fa-folder'></i>"); li.click(function () { var subPath = $(this).attr("data-path"); loadFileList(subPath); }); } li.append(icon); li.append("&nbsp;" + fileName); li.attr("data-path", file); fileList.append(li); } }, error: function () { alert("load file list error"); } }); } ``` 2. HDFS文件上传 通过表单上传文件,然后通过ajax请求将文件上传到后端接口。 ```html <form id="uploadForm"> <div class="form-group"> <label for="file">Choose file</label> <input type="file" name="file" id="file"> </div> <div class="form-group"> <label for="path">Target directory</label> <input type="text" name="path" id="path" value="/"> </div> <button type="submit" class="btn btn-primary">Upload</button> </form> ``` ```javascript $(document).ready(function () { $("#uploadForm").submit(function (e) { e.preventDefault(); var formData = new FormData(this); $.ajax({ url: "/hdfs/upload", type: "post", data: formData, contentType: false, processData: false, success: function () { alert("upload success"); }, error: function () { alert("upload error"); } }); }); }); ``` 3. HDFS文件删除 通过点击按钮将目标路径发送到后端接口进行删除。 ```html <div class="form-group"> <label for="deletePath">Delete file</label> <input type="text" name="deletePath" id="deletePath"> <button class="btn btn-danger" onclick="deleteFile()">Delete</button> </div> ``` ```javascript function deleteFile() { var path = $("#deletePath").val(); $.ajax({ url: "/hdfs/delete", type: "post", data: { "path": path }, success: function (data) { if (data === "success") { alert("delete success"); } else { alert("delete error"); } }, error: function () { alert("delete error"); } }); } ``` 4. HDFS文件下载 通过点击文件名将目标路径发送到后端接口进行下载。 ```javascript $(document).ready(function () { $("body").on("click", "li", function () { var path = $(this).attr("data-path"); if (path.indexOf(".") >= 0) { window.location.href = "/hdfs/download?path=" + path; } }); }); ``` ### 回答2: SSM框架(Spring+Spring MVC+MyBatis)是一种常用的Java Web开发框架,它将Java的企业级开发框架整合在一起,提供了一套完整的解决方案。 下面以展示HDFS文件列表、上传文件、删除文件和下载文件为例,给出SSM框架的前后端代码实现: 前端代码: 展示HDFS文件列表: ```html <!--假设页面上有一个列表展示区域--> <ul id="fileList"> <!--动态生成HDFS文件列表--> </ul> <script> $(document).ready(function(){ //页面加载完成后,通过AJAX请求后端接口获取HDFS文件列表 $.ajax({ url: "后端接口地址", dataType: "json", type: "GET", success: function(data){ //将返回的文件列表数据动态插入到页面中 for(var i=0; i<data.length; i++){ $("#fileList").append("<li>"+data[i]+"</li>"); } } }); }); </script> ``` 上传文件: ```html <form id="uploadForm"> <input type="file" id="fileInput" name="file" /> <button type="button" onclick="uploadFile()">上传</button> </form> <script> function uploadFile(){ var formData = new FormData(); formData.append("file", $("#fileInput")[0].files[0]); $.ajax({ url: "后端接口地址", data: formData, type: "POST", processData: false, contentType: false, success: function(data){ alert("上传成功"); } }); } </script> ``` 删除文件: ```html <button type="button" onclick="deleteFile('文件路径')">删除文件</button> <script> function deleteFile(filePath){ $.ajax({ url: "后端接口地址", data: {filePath: filePath}, type: "POST", success: function(data){ alert("删除成功"); } }); } </script> ``` 后端代码(Java): 展示HDFS文件列表: ```java @Controller public class FileController { @Autowired private HdfsService hdfsService; @RequestMapping("/file/list") @ResponseBody public List<String> getFileList(){ //调用HdfsService中的方法获取HDFS文件列表 return hdfsService.getFileList(); } } ``` 上传文件: ```java @Controller public class FileController { @Autowired private HdfsService hdfsService; @RequestMapping(value = "/file/upload", method = RequestMethod.POST) @ResponseBody public String uploadFile(@RequestParam("file") MultipartFile file){ //调用HdfsService中的方法上传文件到HDFS return hdfsService.uploadFile(file); } } ``` 删除文件: ```java @Controller public class FileController { @Autowired private HdfsService hdfsService; @RequestMapping(value = "/file/delete", method = RequestMethod.POST) @ResponseBody public String deleteFile(@RequestParam("filePath") String filePath){ //调用HdfsService中的方法删除HDFS文件 return hdfsService.deleteFile(filePath); } } ``` 以上就是使用SSM框架展示HDFS文件列表、上传文件、删除文件和下载文件的前后端代码。当然,实际开发中,还需要根据具体需求进行接口的具体实现和逻辑处理。 ### 回答3: SSM框架是指Spring + SpringMVC + MyBatis三个开源框架的整合使用。下面是一个展示HDFS文件列表、上传文件、删除文件以及下载文件的简单SSM框架的前后端代码实现。 1. 后端代码实现: (1)创建HdfsService接口,定义文件操作的方法。 ```java public interface HdfsService { List<String> getFileList(String path); void uploadFile(MultipartFile file, String path); void deleteFile(String path); void downloadFile(String path, HttpServletResponse response); } ``` (2)创建HdfsServiceImpl类,实现HdfsService接口,用于具体实现文件的操作。 ```java @Service public class HdfsServiceImpl implements HdfsService { @Autowired private FileSystem fileSystem; @Override public List<String> getFileList(String path) { try { FileStatus[] fileStatusArray = fileSystem.listStatus(new Path(path)); List<String> fileList = new ArrayList<>(); for (FileStatus fileStatus : fileStatusArray) { fileList.add(fileStatus.getPath().getName()); } return fileList; } catch (IOException e) { e.printStackTrace(); return null; } } @Override public void uploadFile(MultipartFile file, String path) { try { FSDataOutputStream outputStream = fileSystem.create(new Path(path + "/" + file.getOriginalFilename())); outputStream.write(file.getBytes()); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } @Override public void deleteFile(String path) { try { fileSystem.delete(new Path(path), true); } catch (IOException e) { e.printStackTrace(); } } @Override public void downloadFile(String path, HttpServletResponse response) { try { FSDataInputStream inputStream = fileSystem.open(new Path(path)); IOUtils.copy(inputStream, response.getOutputStream()); response.flushBuffer(); } catch (IOException e) { e.printStackTrace(); } } } ``` 2. 前端代码实现: (1)创建Controller类,处理请求。 ```java @Controller @RequestMapping("/hdfs") public class HdfsController { @Autowired private HdfsService hdfsService; @RequestMapping("/list") public ModelAndView fileList(String path) { ModelAndView modelAndView = new ModelAndView("fileList"); List<String> fileList = hdfsService.getFileList(path); modelAndView.addObject("fileList", fileList); return modelAndView; } @RequestMapping("/upload") public String uploadFile(MultipartFile file, String path) { hdfsService.uploadFile(file, path); return "redirect:/hdfs/list?path=" + path; } @RequestMapping("/delete") public String deleteFile(String path) { hdfsService.deleteFile(path); return "redirect:/hdfs/list?path=" + new Path(path).getParent().toString(); } @RequestMapping("/download") public void downloadFile(String path, HttpServletResponse response) { hdfsService.downloadFile(path, response); } } ``` (2)创建fileList.jsp页面,在页面上展示文件列表。 ```html <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>文件列表</title> </head> <body> <h2>文件列表</h2> <% for (String file : (List<String>) request.getAttribute("fileList")) { %> <p><a href="/hdfs/download?path=<%= request.getParameter("path") + "/" + file %>"><%= file %></a> <a href="/hdfs/delete?path=<%= request.getParameter("path") + "/" + file %>">删除</a></p> <% } %> <form action="/hdfs/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"/> <input type="hidden" name="path" value="<%= request.getParameter("path") %>"/> <input type="submit" value="上传"/> </form> </body> </html> ``` 上面的代码是一个简单的SSM框架的示例,实现了展示HDFS文件列表、上传文件、删除文件和下载文件的功能。这些代码可以根据具体的项目需求进行修改和扩展。

相关推荐

最新推荐

recommend-type

鸡国大冒险运行程序,点开即用

recommend-type

基于Python+Flask的安全多方计算的隐私保护系统设计与实现+全部资料齐全+部署文档.zip

【资源说明】 基于Python+Flask的安全多方计算的隐私保护系统设计与实现+全部资料齐全+部署文档.zip基于Python+Flask的安全多方计算的隐私保护系统设计与实现+全部资料齐全+部署文档.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
recommend-type

聊天系统(java+applet).zip

聊天系统(java+applet)
recommend-type

setuptools-11.0-py2.py3-none-any.whl

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip

基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip基于UCI Heart Disease数据集的心脏病分析python源码+数据集+演示ppt+详细资料.zip
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。