1 Star 3 Fork 1

dictator/nfs-nodefileserver

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MPL-2.0

nfs-nodefileserver

一个基于node.js的文件服务,可作为中小型项目的文件服务,目前完成了,文件上传,文件分片上传,文件合并等功能,数据库方面用的是mysql,前端的上传插件调用的是百度的webuploader当然你也可以使用其他的三方插件或是直接表单提交文件都是OK的,具体的API文件将在一周内开放,目前只是测试版本还有大概15%的方法尚未完成,不影响基础的使用流程。

本项目是本人用作学习node.js的项目肯定有很多不足之处,所以希望尽早开放出来多听一些意见来改进学习,此外不接受任何负面的评论,项目将采用mpl开源协议,只求使用者声明该部分是使用该项目的即可,使用用户多的话会开一个单独的站点来说明,同时该项目还有个.net版本的若有需要可以联系作者。QQ群:192321831,QQ:290341190(暂时开放)欢迎加好友一起讨论

开始使用

1、首先你要确保你的服务器已经包含了Node.js的运行环境

2、在项目路径下public/database/nfs_nodefileserver.sql,是Mysql的创建数据库的SQL语句,执行完成后在根目录下的nfsconfig.json中进行数据库配置,如下:

"openDatabase": true,
 "poolContent":{
    "host"     : "localhost",
    "user"     : "root",
    "password" : "root",
    "port": "3306",
    "database": "nfs_nodefileserver"
  },

当openDatabase:false时回去读取xmlpath,在xmlpath处进行xml格式的文件存储,该功能暂时在部分功能下会失效(还没完成)

3、之后就可以启动项目并访问端口号3000来进行整个文件服务的测试

4、进入页面后,只点击上传按钮选择文件后即完成上传功能,此时会在nfsconfig.json配置文件中设置的filePath的位置将上传的文件保存至此处。在返回内容中拷贝fileid(文件id)至需下载的FileID的input框中点击下载按钮即完成了整个上传下载的流程。

5、由于中途加入了阿里云文件备份的SDK所以,ws报了一个javascript版本不正确,在修改为es6后成功运行,这个问题在正式环境下还没有进行过测试,如果出现相同问题可以注释掉ali云备份相关代码。

API使用文档

以下所有的接口仅供参考请以router/index.js下的方法为准,因为整个项目仍处于编写阶段存在,API文档未及时更新的可能性。但是基本不影响整个项目的使用

1. nfs提供了一个基础的文件上传的方法:uploadsimplefile。使用者将文件以post请求的方式进行提交,允许使用三方插件,本项目就是以webuploader作为基础的测试插件来进行使用的。参数有md5(string型,当md5为空时会自动生成一个uuid代替),uploadSourceType(INT型,上传来源,如果项目用到的地方多的话可以传该参数),fileType(INT型,文件类型,或者说是用途,标签之类的:娱乐、游戏、视频等)。返回结果如上图所示。

2. nfs提供了一个文件分片上传的方法:uploadchunkfile。该方法是基于前端已经进行了分片处理,据我所知webuploader,uploadfy等都是包含分片方法的。在测试页面中点击开启分片后,文件就以分片的形式进行上传,分片大小为2M每个。由于大文件的md5值计算较慢,在短时间内会提供本人之前用的一种方式。

3. nfs提供了一个文件下载的方法:downLoadFiles。根据提交请求的参数fileIds(多个文件id以英文的逗号','隔开),isZip(string型,"true"或者"false"),当下载单个文件且isZip="true"时将进行压缩下载,当请求下载多个文件时,自动后台压缩后下载。目前isZip还未完成所以只支持单个文件的上传和下载。下图为多个文件的压缩下载:

4. nfs提供了一个获取文件信息的方法:getFilesInfo。该方法为get方法,根据提交请求的参数fileIds(多个文件id以英文的逗号','隔开),返回对应的文件信息

5. nfs提供了一个获取分片信息的方法:getChunkInfo。该方法为get方法,根据提交请求的参数fileIds(多个分片id以英文的逗号','隔开),返回对应的分片信息

6. nfs提供了一个验证文件是否存在的方法:fileExist。该方法为get方法,根据提交请求的参数md5,验证文件是否存在(包括物理路径下是否存在),主要是用于内部文件验证使用所以暂不开放一次性请求多个md5的方法。

7. nfs提供了一个验证分片是否存在的方法:chunkExist。该方法为get方法,根据提交请求的参数md5和chunk,验证分片是否存在(包括物理路径下是否存在),主要是用于内部分片验证使用所以暂不开放一次性请求多个md5的方法。

8. nfs提供了一个文件合并的方法:mergeFile。该方法为get方法,根据提交请求的参数md5值,去数据库找到对应路径后进行一些必要的验证(文件数之类的)后进行文件合并。合并完成后会在n_file_info表中新插入一条该合并文件的数据并返回。注:可能与设计理念有关,每个文件有一个唯一的md5值,只要md5值相同的文件,我便认为是同一个文件剩余的文件信息是入库的。

9. nfs提供了一个文件删除的方法:deleteFiles。该方法为get方法,根据提交请求的参数fileIds(多个文件id以英文的逗号','隔开),当配置文件canPhysicalDelete(是否允许物理删除):false时只进行数据库status的置为1,否则会去文件的对应位置进行删除操作。

10. nfs提供了一个分片删除的方法:deleteChunks。该方法为get方法,根据提交请求的参数fileIds(多个分片id以英文的逗号','隔开),当配置文件canPhysicalDelete(是否允许物理删除):false时只进行数据库status的置为1,否则会去文件的对应位置进行删除操作。

11. 整个项目还在加快进度完成中,所有方法具体可以参考router中的index.js或者nfs_module中的nfs里面都包含有详细的中文说明,若方法中尚未包含具体代码即尚未完成。

12. nfs中大部分的方法都是采用callback回调来返回结果的。并且编写了一个result的返回结果类。result总共有三个属性sate,message,data并且提供了三个方法result.set(state,message,data),result.error(message),result.success(message)。目前大部分的get方法的返回结果都是以这样的格式进行返回的。

13. nfs在设计过程中提供了文件备份功能,主要是讲文件备份至七牛云和阿里的oss对象存储。目前提供了fileBackUpByQiNiu和fileBackUpByAli两个文件备份至云上的测试方法。但对于项目的需求来说尚未完成,仍在代码编写测试阶段。

以下是将要解决或已经结局的部分

##可能存在的问题:module的安装在当前项目中无法安装,所有后续安装的module都是从另一个项目中拷过来的。所以暂时package.json的是没有包括的,等后续手动加进去不知道会不会有问题 ##文件下载,比如下载请求数大于5时拒绝后续请求,日志系统,文件放满,跨域,分布式 ##整个错误的回调机制 ##在文件分片上传过程中若发现该文件存在于数据库表中,而该目录地址下不存在该文件,暂时验证时为文件不存在,即可以上传。整个逻辑肯定会出现bug,不过当不存在人为对文件或 数据库进行操作时不会出现问题。 ##暂时前端页面不支持多个文件一起分片上传,因为我还做不到根据文件传md5值,现在的md5是一样传上来的。 ##基于安全考虑一开始上传的文件就是不带后缀的,这次连文件名中也不再包含任何文件信息以"chunk-chunks"的格式来存放。 ##参数一致性,因为项目是本人一人完成的,所以从前端页面到后端代码及数据库,牵一发动全身,为了开发的快速,有部分分片的参数里仍存在fileIds的字段 ##存在某种需求,要求下载文件以完整目录格式压缩后下载

嗯~本人接受支付宝捐赠:290341190@qq.com(请填写备注,将用于之后站点建设时的感谢部分。)

本项目所有权归作者:方一行 所有。开源协议暂未填写完成故此申明,作为开源项目禁止一切二次开发后单独出售的情况,所有引用本项目的都需有明确注释声明该项目的所有者,所有二次开发再开源的都需要知会作者一声,作者不接受任何由该项目引发的负面责任以上。

Mozilla Public License Version 2.0 ================================== 1. Definitions Copyright (c) 2018-present fyh386 (fangyihang). All rights reserved. 1.1. "Contributor" means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software. 1.2. "Contributor Version" means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor's Contribution. 1.3. "Contribution" means Covered Software of a particular Contributor. 1.4. "Covered Software" means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof. 1.5. "Incompatible With Secondary Licenses" means (a) that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or (b) that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License. 1.6. "Executable Form" means any form of the work other than Source Code Form. 1.7. "Larger Work" means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software. 1.8. "License" means this document. 1.9. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License. 1.10. "Modifications" means any of the following: (a) any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or (b) any new file in Source Code Form that contains any Covered Software. 1.11. "Patent Claims" of a Contributor means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version. 1.12. "Secondary License" means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses. 1.13. "Source Code Form" means the form of the work preferred for making modifications. 1.14. "You" (or "Your") means an individual or a legal entity exercising rights under this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. License Grants and Conditions -------------------------------- 2.1. Grants Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: (a) under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and (b) under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version. 2.2. Effective Date The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution. 2.3. Limitations on Grant Scope The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor: (a) for any code that a Contributor has removed from Covered Software; or (b) for infringements caused by: (i) Your and any other third party's modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or (c) under Patent Claims infringed by Covered Software in the absence of its Contributions. This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4). 2.4. Subsequent Licenses No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3). 2.5. Representation Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License. 2.6. Fair Use This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents. 2.7. Conditions Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1. 3. Responsibilities ------------------- 3.1. Distribution of Source Form All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients' rights in the Source Code Form. 3.2. Distribution of Executable Form If You distribute Covered Software in Executable Form then: (a) such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and (b) You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients' rights in the Source Code Form under this License. 3.3. Distribution of a Larger Work You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s). 3.4. Notices You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies. 3.5. Application of Additional Terms You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction. 4. Inability to Comply Due to Statute or Regulation --------------------------------------------------- If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Termination -------------- 5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice. 5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate. 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination. ************************************************************************ * * * 6. Disclaimer of Warranty * * ------------------------- * * * * Covered Software is provided under this License on an "as is" * * basis, without warranty of any kind, either expressed, implied, or * * statutory, including, without limitation, warranties that the * * Covered Software is free of defects, merchantable, fit for a * * particular purpose or non-infringing. The entire risk as to the * * quality and performance of the Covered Software is with You. * * Should any Covered Software prove defective in any respect, You * * (not any Contributor) assume the cost of any necessary servicing, * * repair, or correction. This disclaimer of warranty constitutes an * * essential part of this License. No use of any Covered Software is * * authorized under this License except under this disclaimer. * * * ************************************************************************ ************************************************************************ * * * 7. Limitation of Liability * * -------------------------- * * * * Under no circumstances and under no legal theory, whether tort * * (including negligence), contract, or otherwise, shall any * * Contributor, or anyone who distributes Covered Software as * * permitted above, be liable to You for any direct, indirect, * * special, incidental, or consequential damages of any character * * including, without limitation, damages for lost profits, loss of * * goodwill, work stoppage, computer failure or malfunction, or any * * and all other commercial damages or losses, even if such party * * shall have been informed of the possibility of such damages. This * * limitation of liability shall not apply to liability for death or * * personal injury resulting from such party's negligence to the * * extent applicable law prohibits such limitation. Some * * jurisdictions do not allow the exclusion or limitation of * * incidental or consequential damages, so this exclusion and * * limitation may not apply to You. * * * ************************************************************************ 8. Litigation ------------- Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party's ability to bring cross-claims or counter-claims. 9. Miscellaneous ---------------- This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor. 10. Versions of the License --------------------------- 10.1. New Versions Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number. 10.2. Effect of New Versions You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward. 10.3. Modified Versions If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License). 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached. Exhibit A - Source Code Form License Notice ------------------------------------------- This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. You may add additional accurate notices of copyright ownership. Exhibit B - "Incompatible With Secondary Licenses" Notice --------------------------------------------------------- This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0.

简介

一个基于node.js的文件服务,可作为中小型项目的文件服务,目前完成了,文件上传,文件分片上传,文件合并等功能,数据库方面用的是mysql,具体的API文件将在一周内开放。本项目是本人用作学习node.js的项目肯定有很多不足之处,所以希望尽早开放出来多听一些意见来改进学习,此外不接受任何负面的评论,项目将采用mpl开源协议,只求使用者声明该部分是使用该项目的即可,使用用户多的话会开一个单独的站点来说明。QQ群:192321831欢迎加好友一起讨论。 展开 收起
JavaScript
MPL-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/fyh386/nfs-nodefileserver.git
git@gitee.com:fyh386/nfs-nodefileserver.git
fyh386
nfs-nodefileserver
nfs-nodefileserver
master

搜索帮助