# DiskMirror BackEnd 后端服务器版本 *开源技术栏* 文件系统管理 框架 后端服务器版本,减少开发量! ## 目录 [TOC]  > 如果您是从 diskMirror-spring-boot 来到此文章的,请直接跳转到 [#我如何使用%20盘镜](#我如何使用%20盘镜) 中进行阅读就可以啦! # DiskMirror - BackEnd 用于进行磁盘文件管理的一面镜子,其包含许多的适配器,能够将任何类型的文件数据流中的数据接入到管理中,并将保存之后的 url 返回,支持不同文件所属空间的管控,您还可以通过此API 获取到指定 userid 下面的所有文件的 url,在诸多场景中可以简化IO相关的实现操作,能够降低开发量,例如web服务器中的磁盘管理操作! ## 什么是适配器 适配器在这里是用于进行文件传输的桥梁,能够让您将自己的数据源(例如您的后端服务器)与指定的数据终端(例如您的各类文件系统)进行连接,将数据提供给数据终端,减少了您手动开发IO代码的时间。 在未来,我们将会提供更多的适配器选项,让适配器的数据终端具有更多的支持。 ### 我如何部署 盘镜 后端系统 #### 下载并修改源码 您需要下载我们的后端系统源码包,并在 `top.lingyuzhao.diskMirror.backEnd.conf.DiskMirrorConfig` 类中去进行一些配置,下面就是需要被配置的代码块,您可以在类中找到下面的代码块,并在这里进行配置项目的设置或您自己任意的配置初始化行为 。 ``` /* * 静态代码块 用于初始化一些配置 * TODO 需要配置 */ static { // 配置需要被 盘镜 管理的路径 此路径也应该可以被 web 后端服务器访问到 DiskMirrorConfig.putOption(WebConf.ROOT_DIR, "/DiskMirror/data"); // 配置一切需要被盘镜处理的数据的编码 DiskMirrorConfig.putOption(WebConf.DATA_TEXT_CHARSET, "UTF-8"); // 配置后端的IO模式 在这里我们使用的是本地适配器 您可以选择其它适配器或自定义适配器 DiskMirrorConfig.putOption(WebConf.IO_MODE, DiskMirror.LocalFSAdapter); // 设置每个空间中每种类型的文件存储最大字节数 DiskMirrorConfig.putOption(WebConf.USER_DISK_MIRROR_SPACE_QUOTA, 128 << 10 << 10); // 设置协议前缀 需要确保你的服务器可以访问到这里!!! DiskMirrorConfig.putOption(WebConf.PROTOCOL_PREFIX, "https://diskmirror.test.lingyuzhao.top"); // 设置后端的允许跨域的所有主机 ALL_HOST = new String[]{ "https://www.lingyuzhao.top", "https://www.lingyuzhao.top/" }; DiskMirrorConfig.putOption(WebConf.ALL_HOST_CONTROL, JSONArray.from(ALL_HOST)); // 设置访问 diskMirror 时的密钥 DiskMirrorConfig.WEB_CONF.setSecureKey("diskMirror-BackEnd"); // 设置后端的IO模式 请确保这个是最后一个配置项目 因为在配置了此项目之后 就会构建适配器 DiskMirrorConfig.putOption(WebConf.IO_MODE, DiskMirror.LocalFSAdapter); } ``` #### 打包之后直接进行部署 您可以直接将源码打包成 war 包,然后直接将 war 包放入您的服务器中,然后运行您的web容器即可,例如 tomcat 等,这些操作结束之后 您需要访问您的盘镜 web 页面,页面的地址根据您的部署方式决定。 如果访问到了 web 页面则代表您的部署成功了,如果没有访问到 web 页面则代表您的部署失败了,您可以联系我,我的邮箱是:liming7887@qq.com。 ##### TomCat 启用 目录映射 由于我们的盘镜后端是涉及文件上传的,并且读取是使用的 url,所以我们需要确保 TomCat 可以访问我们的目录,您可以按照下面的方式配置`server.xml`。 ```xml <Context docBase="存储文件的真实路径(一般就是 WebConf.ROOT_DIR 对应的值)" path="存储文件的访问路径(一般就是 WebConf.PROTOCOL_PREFIX 对应的值的路径部分)" reloadable="true"/> ``` ##### TomCat 设置 allowCasualMultipartParsing 因为要上传文件,所以在这里我们要确保 服务器 是可以处理 part 的,以及url,因此可以在 `context.xml` 里面这样配置 ```xml <!-- TODO 在这里设置 allowCasualMultipartParsing = true 即可成功 --> <Context allowCasualMultipartParsing="true"> <!-- Default set of monitored resources. If one of these changes, the --> <!-- web application will be reloaded. --> <WatchedResource>WEB-INF/web.xml</WatchedResource> <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource> <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource> </Context> ``` ### 我如何使用 盘镜 在这里您需要获取到我们在盘镜系统中的 [diskMirror.js](https://github.com/BeardedManZhao/DiskMirrorBackEnd/blob/main/web/js/diskMirror.js) 文件 装载到前端项目中(不论是何版本,此文件都是存在于包中的,您可以直接进行获取哦),然后在前端的 JS 中进行函数的调用即可,接下来我们将演示一些操作。 > JS 中的所有函数都具有详细的注释,根据脚本可直接与盘镜服务器进行通信。 #### 实例化盘镜 在盘镜实例化的之前 您需要将 axios 这个类引入到您的项目中,然后在实例化盘镜的时候 传入 盘镜的后端服务器地址。 如果您的实例化操作需要多次进行,也不用担心,盘镜整体是一个非常轻量级的框架,其实例化的时间是非常短的,所以您可以多次实例化盘镜,只需要传入不同的配置即可。 ```js // 实例化 盘镜 在这里指向盘镜的后端服务器网址 就是可以直接访问到后端服务器页面的网址 const diskMirror = new DiskMirror("https://xxx.xxx.xxx"); // 设置密钥 这个密钥需要与后端服务器的一致,让后端服务器信任您的身份 diskMirror.setSk(123123) ``` #### 上传文件数据 我们在这里提供了一个 HTML 代码 演示了如何上传文件 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>diskMirror Text</title> </head> <body> <div id="show"> <input id="fileInput" type="file"> </div> <img alt="" id="show_img" src="#"> </body> <!-- 您需要将 axios 和 盘镜 引入到您的项目中 --> <script rel="script" src="xx/xxx/axios.min.js" type="text/javascript"></script> <script rel="script" src="xx/xxx/diskMirror.js" type="text/javascript"></script> <script> // 实例化 盘镜 在这里指向盘镜的后端服务器 const diskMirror = new DiskMirror("http://xxx.xxx.xxx"); document.getElementById("fileInput").onchange = () => { // 获取到文件数据 const file = document.getElementById("fileInput").files[0]; // 上传文件 diskMirror.upload( // 这个 json 就是请求参数的设置 { // 设置要上传的文件名称,这个名称就是在后端中的文件名称 fileName: file.name, // 设置要上传的文件所属空间 userId: 1024, // 设置要上传的文件类型 type: 'TEXT' }, // 设置要上传的文件对象 file, // 设置上传成功之后的回调函数 (res) => { // 在这里可以设置上传成功之后的回调函数 // 如果上传成功 就在这里将被上传的文件数据的 url 显示 document.getElementById("show").innerText = JSON.stringify(res); // 假设我们要上传的是图片 希望可以在上传之后将图片显示出来 可以在这里接收返回的 url document.getElementById("show_img").src = res.url }, // 设置上传失败之后的回调函数 (res) => alert(res) ) } </script> </html> ``` ### 获取文件 url ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> <div id="show"> </div> </body> <script rel="script" src="xx/xx/axios.min.js" type="text/javascript"></script> <script rel="script" src="xx/xxx/diskMirror.js" type="text/javascript"></script> <script> // 实例化 盘镜 在这里指向盘镜的后端服务器 const diskMirror = new DiskMirror("http://xxx.xxx.xxx"); // 查询出文件数据 参数分别是 文件所属空间 类型 以及回调函数 在这里您同样可以传递两个回调,第一个是成功之后的回调,第二个是失败之后的回调,在这里我们只传递了一个函数 这是为了方便观察代码 diskMirror.getUrls(1024, 'TEXT', (res) => { // 如果查询到数据 就在这里将所有的 文件数据的 url 显示 document.getElementById("show").innerText = JSON.stringify(res); }) </script> </html> ``` ### 删除文件 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> <div id="show"> </div> </body> <script rel="script" src="xx/xx/axios.min.js" type="text/javascript"></script> <script rel="script" src="xx/xxx/diskMirror.js" type="text/javascript"></script> <script> // 实例化 盘镜 在这里指向盘镜的后端服务器 const diskMirror = new DiskMirror("http://xxx.xxx.xxx"); // 删除文件的操作和获取文件 url 的操作很接近,只是在 文件类型的后面 多了文件名称的形参 diskMirror.remove(1024, 'TEXT', 'fileName.txt', (res) => { // 如果查询到数据 就在这里将所有的 文件数据的 url 显示 document.getElementById("show").innerText = JSON.stringify(res); }) </script> </html> ``` ---- - diskMirror 后端服务器版本:https://github.com/BeardedManZhao/DiskMirrorBackEnd.git - diskMirror Java API 版本:https://github.com/BeardedManZhao/DiskMirror.git ------ ***操作记录*** 作者:[LY小助手](https://www.lingyuzhao.top//index.html?search=18 "LY小助手") 操作时间:2024-04-11 14:37:29 星期四 事件描述备注:保存/发布 中国 天津 [](如果不需要此记录可以手动删除,每次保存都会自动的追加记录)