# small-file-server-base-servlet **Repository Path**: secondriver/small-file-server-base-servlet ## Basic Information - **Project Name**: small-file-server-base-servlet - **Description**: 基于多存储平台的小图片文件服务器,采用Java Servlet + Freemarker + Restful API技术实现。 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2018-09-03 - **Last Updated**: 2021-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于多存储平台的小图片文件服务器 ## 1. 目的 面向Web的应用程序离不开各种图片文件的展示,该项目致力于解决Web程序图片存储,展示问题。 ## 2. 技术 + Servlet + Freemarker模板引擎 + Mongodb数据库 ## 3. 设计 + MVC设计模式 + 提供了API接口 + 面向接口编程 ![](small.png) ## 4. 功能 ### 4.1 Web可视化 + 图片的上传 + 图片的查询 + 图片的删除 + 图片的下载 ### 4.2 API接口 在线文档:https://documenter.getpostman.com/view/4028454/RWTsqaZq + 图片的上传 + 图片的查询 + 图片的删除 ## 5. 实现 #### 5.1 MongoDB 基于MongoDB存储的实现依赖MongoDB服务器,主要使用到MongoDB的GridFS特性。能够同时将文件流和文件的元信息存储到MongoDB中。 #### 5.2 Memory 基于Memory存储的实现是为了快速看到项目的效果,全局维护一个Map结构,将所有的文件上传,下载,删除操作转换对Map的操作,数据都存储在内存中,仅作演示使用。 #### 5.3 OSS 基于[阿里云OSS](https://help.aliyun.com/document_detail/32008.html?spm=a2c4g.11174283.6.700.6c4d7da2skTfcr)存储的实现依赖OSS云服务,以及MySQL数据库。其中OSS主要存储文件流,MySQL数据库存储文件的元信息。 依赖`阿里云OSS`的客户端库: ```xml com.aliyun.oss aliyun-sdk-oss 2.8.3 ``` ### 6. 问题 + 项目如何防止[盗链](https://baike.baidu.com/item/%E7%9B%97%E9%93%BE) + 采用文件存储时如何解决小文件数量特别大时效率问题 + 项目中图片检索在高并发下的效率问题 ### 7. 扩展 + 私有访问:项目目前是公开链接,可以采用`accessKey` 和`accessSecret`的方式进行授权,增加有效时间 + 高频缓存:项目中检索图片的接口增加缓存层,可以采用`memory`或者[`redis`](http://www.redis.cn/)等第三方服务 + 小文件数量:项目中采用文件系统是可以进行多个小文件合并为大文件,然后进行文件的数据[随机访问](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/RandomAccessFile.html)获取文件内容 + 图片检索处理:项目中图片查询并未提供扩展功能,可以在检索时[实现图片裁剪,缩放,水印](https://gitee.com/secondriver/image-process-service)等功能 + 客户端:项目中提供了API的方式使用服务,可以提供`Java`语言的客户端包(封装API请求处理) + 项目应用:涉及到图片存储,展示的项目均可使用