Computer Science and Application
Vol. 13  No. 04 ( 2023 ), Article ID: 64636 , 9 pages
10.12677/CSA.2023.134083

个人NAS微信小程序的设计与实现

甘俊1,倪胜巧1,2*

1西藏大学信息科学技术学院,西藏 拉萨

2四川大学机械工程学院,四川 成都

收稿日期:2023年3月20日;录用日期:2023年4月18日;发布日期:2023年4月27日

摘要

当前高性能网络给人们提供便利体验的同时,也对大量数据的存储提出了更高的要求,随时随地能够进行数据分析、存储与管理是当前的应用和研究热点。微信小程序是一款无需安装并且安全稳定、方便快捷的网络应用程序,是人们日常使用最频繁的工具之一。本文阐述通过云存储的方式结合微信小程序平台实现一种私人网络附属存储(NAS)存储小程序,实现了个人文件的跨平台、跨系统地分享、存储、管理。

关键词

SpringBoot,微信小程序,NAS,云存储,OAuth 2.0

Design and Implementation of a Personal NAS WeChat Mini-Program

Jun Gan1, Shengqiao Ni1,2*

1School of Information Science and Technology, Tibet University, Lhasa Tibet

2School of Mechanical Engineering, Sichuan University, Chengdu Sichuan

Received: Mar. 20th, 2023; accepted: Apr. 18th, 2023; published: Apr. 27th, 2023

ABSTRACT

At present, as high-performance networks provide people with convenient experiences, they also put high demands on the storage of large amounts of data. The ability to analyze, store, and manage data anytime and anywhere is currently a hot topic in applications and research. WeChat mini-program is a network application that does not require installation, is secure, stable, convenient, and fast, and is one of the most frequently used tools for daily application. This article elaborates on the implementation of a private Network Attached Storage (NAS) storage mini-program through cloud storage combined with the WeChat mini-program platform, which enables cross-platform, cross-system sharing, storage, and management of personal files.

Keywords:SpringBoot, WeChat Mini-Program, NAS, Cloud Storage, OAuth 2.0

Copyright © 2023 by author(s) and Hans Publishers Inc.

This work is licensed under the Creative Commons Attribution International License (CC BY 4.0).

http://creativecommons.org/licenses/by/4.0/

1. 引言

日常生活中普遍存在的存储设备有光盘、U盘、移动硬盘、网盘等等。利用存储,我们可以将重要的资料、文件、生活中的照片、电影视频等保存起来。但是由于大多数用户对于先进、新型的存储设备和存储方式缺乏足够的了解,仍然习惯使用光盘、U盘和移动硬盘等相对传统的存储方式,部分用户甚至直接将数据存储在电脑和手机里 [1] [2] 。将数据存储在实物物体之内对于数据的安全性与管理有着诸多不便,如实物物体存储大小固定、丢失带来的数据丢失的问题,甚至会有数据泄露的安全问题,且实物物体无法做到数据跨平台、异地管理 [3] [4] 。同时,网盘存储需要首先下载与之对应的应用程序,还有网速限制、存储空间限制或者存在会员收费等问题。微信小程序作为软件开发的后起之秀,其最为突出的好处之一就是即用即走,这也是微信小程序设计之初主打的概念。微信是人们日常使用最频繁的工具之一,微信小程序内嵌于微信中,借助微信使用导向,吸引流量,符合大众应用软件惯性。不同于APP,小程序不在手机界面占据单独空间,且查找方便,不用下载和等待下载,简化使用流程 [5] [6] [7] [8] [9] 。因此,为了方便数据的存储、管理,本文通过设计开发出一款基于云存储技术,使用简单易于操作的NAS微信小程序,解决实物存储、网盘存储带来的诸多不便。

2. 相关技术介绍

2.1. 开发与测试环境

为了实现小程序的快速开发、更新迭代、测试,该项目采用前后端分离的开发方式模式。

前端开发运用微信小程序官方提供的微信开发者工具,后端开发使用JetBrains公司的产品IntelliJ IDEA开发集成环境。移动端测试,分别对于现主流的移动端安卓、iOS、和鸿蒙三个不同的系统进行项目测试。开发与测试环境见表1

2.2. NAS

NAS (Network Attached Storage,网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”。它是一种专用数据存储服务器。它以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽、提高性能、降低总拥有成本、保护投资。其成本远远低于使用服务器存储,而效率却远远高于后者 [4] 。

Table 1. Development and test environment

表1. 开发与测试环境

2.3. SpringBoot

SpringBoot是由Pivotal团队提供的全新开源轻量级的框架系统,后端采用SpringBoot框架,SpringBoot的一大优点是能快速创建项目、减少配置文件的配置并与其他框架完美地集成,SpringBoot内嵌Servlet、Tomcat、Jetty等。SpringBoot可直接运用java-jar指令对项目打包为jar,同时进行自动依赖与版本控制,帮助开发者导入所用到的全部依赖,并自动控制版本,文中所有的配置都由SpringBoot完成,提高了开发效率 [10] [11] 。

2.4. MySQL

MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前,MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库 [12] 。

2.5. Redis

Redis (Remote Dictionary Server),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、高性能的Key-Value数据库,并提供多种语言的API。在高并发场景中表现出极高的性能和配置简单等优势 [13] [14] 。

2.6. COS

对象存储COS (Cloud Object Storage)是由腾讯云推出的无目录层次结构、无数据格式限制、可容纳海量数据且支持HTTP/HTTPS协议访问的分布式存储服务。腾讯云COS的存储桶空间无容量上限,无需分区管理,适用于CDN数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。COS提供网页端管理界面、多种主流开发语言的SDK、API以及命令行和图形化工具,并且兼容S3的API接口,方便用户直接使用社区工具和插件。

2.7. OAuth 2.0与Token

OAuth 2.0是目前较流行的授权机制,使用令牌(Token)代替用户名密码进行身份认证与权限鉴别,因此用户信息泄露较低,并可以设置令牌时效,也可以直接在令牌中写入权限信息 [15] [16] [17] [18] 。

3. 程序的设计

3.1. 系统设计

项目整体架构为五层结构,即展示层、控制层、业务层、支持层、数据层。系统架构详见图1

Figure 1. System architecture

图1. 系统架构

3.1.1. 展示层

展示层系统的界面展示,主要是微信小程序前端模块,包括小程序端用户界面的实现,小程序端用户数据的显示。

3.1.2. 控制层

控制层囊括了系统运行过程中需要的一些公共基础服务控制。响应展示层的请求,连接具体的业务。

3.1.3. 业务层

业务层包含了系统主要的业务服务。上传、下载、删除、分享文件服务与回收站功能是项目的主体功能模块。

3.1.4. 支持层

支持层为系统的设计开发提供支持,如使用npm构建工具实现VantUI的使用、服务接口采用RESTful设计风格、后端采用SpringBoot框架快速构建Java应用、采用MyBatis用于项目中MySQL数据库中的表的映射生成代码以及CRUD操作、使用Swagger工具自动化构建服务接口文档、使用腾讯云储存对象COS的java的SDK操作COS等。

3.1.5. 数据层

数据层为系统提供数据支持,采用MySQL作为主要的数据库进行数据存储,以Redis作中间缓存提高数据读写效率,以及储存有时间限制的验证码和当前登录用户的OAuth2授权认证信息。

3.2. 功能模块设计

项目主要分为个人NAS与图床两大模块,项目功能模块设计详见图2

Figure 2. Functional module design

图2. 功能模块设计

3.2.1. 上传

用户上传文件,后台接口智能化的识别文件类型(文档、图片、音乐、视频、其他文件),分类储存不同类型的文件。将文件信息写入数据库,将文件储存在用户的腾讯云储存对象COS里。详情见图3

Figure 3. File upload

图3. 文件上传

3.2.2. 下载

用户下载文件,调用wx.downloadFile()接口相应的文件腾讯云储存对象COS的URL路径下载文件。通过需要下载的文件类型与文件名称筛选出需要下载的文件,下载下来选择一个聊天搭配微信的文件传输助手使用体验更加。

3.2.3. 分享

用户分享文件,选择文件后设置有效时间(1、7、30天或者永久),调用后台接口生成腾讯云储存对象COS文件的预签名URL,再将生成的预签名URL生成二维码图片,返回二维码图片,前端调用wx.getImageInfo()与wx.showShareImageMeun()完成二维码的分享。详情见图4图5

3.2.4. 回收站

彻底删除,在回收站删除文件将彻底删除文件,删除腾讯云储存对象COS里面对应的文件,回收站表对应的文件的数据。

Figure 4. File sharing

图4. 文件分享

Figure 5. User sharing file

图5. 用户分享文件

文件还原,在回收站能还原被移入回收站的文件,就文件对应的表中逻辑删除的数据还原,同时删除回收站的数据。详情见图6

Figure 6. Recycling station

图6. 回收站

3.3. 数据库设计

本项目采用MySQL数据库,为了保证数据库设计的合理性和减少数据不必要的冗余,数据库表结构严格遵循MySQL三大范式,保证属性的原子性、记录的唯一性、字段的冗余性。根据图2所示的项目功能模块设计,在数据库中建立十张表进行数据的存储。每一张表都采用字段id主键、is_deleted逻辑删除1 (true)已删除,0 (false)未删除、gmt_create创建时间、gmt_modified更新时间的设计规范,对应的为图床、文档、图片、音频、视频、其他、回收站、用户。数据库详见表2

Table 2. Database design

表2. 数据库设计

4. 程序的实现

4.1. OAuth 2.0协议用户登录授权

通过Token令牌实现用户的身份确认,进行相关文件授权操作。微信端用户登录时,会传入户登录凭证res.code到后端,后端使用red.code为密钥加密用户的信息生成临时身份信息令牌Token并且返回到微信端。

首先在微信端登录调用wx.login()方法获取用户登录凭证res.code,再将用户登录凭证传入后端服务器,在后端通过微信官方提供的url获取用户的唯一标识openid,通过openid在MySQL中查询用户信息userInfo,将用户信息封装成Map数据userMap,在以openid为Key,userMap数据为Value存储入Redis数据库中,然后将res.code为密钥openid为加密数据生成Token令牌,并将Token令牌返回微信端,同时以Token令牌为Key,用户登录凭证res.code为Value存储到Redis数据库中。在微信端通过微信官方提供的wx.setStorageSync()方法缓存Token令牌,在微信前端设置请求拦截器,在拦截器中给axios设置请求头Token令牌,同时完成登录。详情见图7

4.2. 身份认证文件管理

用户每次进行请求时,微信端会通过header附带上Token,后端通过解析Token,确认用户身份信息正确后在进行相应的请求操作。

首先微信端发送axios请求,拦截器调用wx.getStoragerSync()方法从微信端缓存获取Token令牌并将Token设置为header,请求头信息跟随axios请求传入后端,后端通过HttpServletRequest对象的getHeader()方法获取Token令牌,以Token为Key查询Redis数据库获取Token密钥res.code,通过res.code密钥解码Token信息,获取用户的openid,再以openid为Key在Redis数据库中获取用户信息,使用用户信息获取相应的文件的权限,再进行相对应的MySQL、COS操作,同时返回结果信息到微信端。详情见图8

Figure 7. User login

图7. 用户登录

Figure 8. Document management

图8. 文件管理

5. 结语

本文主要论述了基于SpringBoot、Redis、云存储等相关技术的个人网络附加存储微信小程序的设计与实现,详细介绍了小程序的各功能模块设计与整体的系统设计。通过OAuth 2.0协议Token授权方式大大提升了数据信息的安全性。对比传统的将数据存储在实物物体之内或者网盘上的存储方式,本项目可以为用户提供安全、可靠、无固定容量、网速、会员的限制,并可跨终端随时随地查看、分享管理的功能,达到了预期目标。但是由于能力和精力等原因,在小程序的功能方面,存在扩展新功能模块的需求,还可以进一步开发完善,如:完善文件的批量操作、压缩文件的在线解压、影音文件的在线观看、图片在线编辑功能等等。

基金项目

教育部第二批新工科研究与实践项目(E-JSJRJ20201343);西藏大学2021年大学生创新训练项目(2021XCX051)。

文章引用

甘 俊,倪胜巧. 个人NAS微信小程序的设计与实现
Design and Implementation of a Personal NAS WeChat Mini-Program[J]. 计算机科学与应用, 2023, 13(04): 844-852. https://doi.org/10.12677/CSA.2023.134083

参考文献

  1. 1. 李艳红. 大数据背景下云存储数据安全研究[J]. 网络安全技术与应用, 2022(9): 70-71.

  2. 2. 张艺. 个人信息“云存储”行为的法律规制——从《个人信息保护法》第40条展开[J]. 石河子大学学报(哲学社会科学版), 2022, 36(5): 61-69. https://doi.org/10.13880/j.cnki.cn65-1210/c.2022.05.006

  3. 3. 王乐欣. 局域网下基于智能路由器的NAS应用系统[J]. 电子设计工程, 2022, 30(22): 169-173. https://doi.org/10.14022/j.issn1674-6236.2022.22.035

  4. 4. 张贝贝, 齐永飞, 张建军, 黄勇, 陈新阳. NAS存储设备在石油物探项目中的应用与前景[C]//2022年中国石油物探学术年会论文集(下). 2022: 592-595. https://doi.org/10.26914/c.cnkihy.2022.039611

  5. 5. 平欣, 宋育斌, 孔维宾, 方忠庆, 陈希. 基于GPS与微信小程序的智能宠物管理系统设计[J]. 软件导刊, 2023, 22(2): 121-126.

  6. 6. 邢水红. 人工智能与微信小程序实现天气实时查询[J]. 软件, 2023, 44(1): 184-186.

  7. 7. 张杨帆, 郝钰鑫, 李隐峰, 田鑫雨, 郑春红, 李泽昊. 基于图像识别的失物招领微信小程序设计[J]. 电子科技, 2022, 35(10): 33-38. https://doi.org/10.16180/j.cnki.issn1007-7820.2022.10.006

  8. 8. 甘俊, 倪胜巧, 霍聪聪. 西藏地区汽车预约服务微信小程序的可行性研究[J]. 计算机时代, 2021(10): 125-127. https://doi.org/10.16644/j.cnki.cn33-1094/tp.2021.10.033

  9. 9. 许静, 蔡斌, 黄昀昉, 孙伟海. 微信小程序辅助的过程考核评价体系在生物工程专业“无机化学实验”课程中的应用与实践[J]. 生物工程学报, 2021, 37(12): 4430-4438. https://doi.org/10.13345/j.cjb.200780

  10. 10. 徐小辉, 刘江涛, 高涵, 丁艳艳. 基于SpringBoot + Vue框架的采气方案系统开发[J]. 计算机仿真, 2021, 38(6): 248-250+382.

  11. 11. 韩佳彤, 杜芳, 甄必鑫, 张宏娜, 乔鹏程, 敖登巴拉, 王春涛. 基于SpringBoot的分布式市政运维分析平台[J]. 内蒙古大学学报(自然科学版), 2022, 53(3): 309-316. https://doi.org/10.13484/j.nmgdxxbzk.20220312

  12. 12. 张勇, 卢强, 鲁晓, 罗燕. 基于MySQL的科研论文管理系统设计与实现[J]. 微型电脑应用, 2023, 39(1): 4-6+10.

  13. 13. 詹利群, 程海林, 任晓炜. Redis缓存技术在自动气象站资料调用中的优化应用[J]. 计算机系统应用, 2019, 28(5): 77-83. https://doi.org/10.15888/j.cnki.csa.006880

  14. 14. 杨婷, 莫若玉, 张秀娟, 朱洲森. 轻量级缓存策略的关系型数据库全文搜索加强与扩展[EB/OL]. 计算机应用: 1-11. http://kns.cnki.net/kcms/detail/51.1307.tp.20221121.0902.002.html, 2022-11-22.

  15. 15. 刘晓晖, 秦子实. 基于OAuth2认证的REST API设计与实践[J]. 电脑知识与技术, 2021, 17(15): 56-57. https://doi.org/10.14004/j.cnki.ckt.2021.1452

  16. 16. 周虎. 一种基于JWT认证Token刷新机制研究[J]. 软件工程, 2019, 22(12): 18-20. https://doi.org/10.19644/j.cnki.issn2096-1472.2019.12.005

  17. 17. 王萍. 基于Spring Security和JWT实现无状态登录[J]. 电子技术, 2021, 50(12): 114-115.

  18. 18. 林琳. 详细了解Cookie Session Token [J]. 计算机与网络, 2019, 45(22): 38-40.

  19. NOTES

    *通讯作者。

期刊菜单