PowerDotNet平台化软件架构设计与实现系列(10):文件平台
很多业务系统少不了需要进行文件管理,比如各种图片、excel、pdf、压缩包等等,为了高度可复用,我们抽象出文件平台,加强对文件进行管理。
PowerDotNet文件平台目前支持阿里云OSS、FastDFS和本地文件服务器三种上传存储类型。
根据我前面文章介绍数据库、缓存、队列等公共服务平台的一贯风格,文件平台也是只要在管理后台点一点,引入公共服务文件上传必要组件,一个应用就可以轻松实现文件管理主要功能,包括(同步或异步)上传、查看、删除、定时自动上传等。
在PowerDotNet中,目前文件平台已经被默认使用于PowerDotNet实现的支付平台、财务平台、HCRM(人员管理)和PCRM(个人用户管理)中,后续有空再简单介绍下这些业务平台系统。
环境准备
1、(必须).Net Framework4.5+
2、(必须)关系型数据库MySQL或SqlServer或PostgreSQL或MariaDB四选一
3、(必须)PowerDotNet数据库管理平台,主要使用DBKey功能
4、(必须)PowerDotNet配置中心Power.ConfigCenter
5、(必须)PowerDotNet注册中心Power.RegistryCenter
6、(必须)PowerDotNet缓存平台Power.Cache
7、(必须)PowerDotNet消息平台Power.Message
8、(必须)PowerDotNet基础数据平台Power.BaseData
9、(必须)PowerDotNet人员管理平台Power.HCRM,后续文章详细介绍
10、(必须)阿里云OSS或FastDFS或本地文件服务器,用于存储文件
一、文件存储配置
在平台管理后台,可以轻松添加文件存储配置,比如OSS、FastDFS和本地文件等。

你可以按需进行配置,比如OSS或者FastDFS(当然FastDFS被誉为配置最繁琐的开源项目就是另一个话题了,只要亲自部署一遍就会体会^_-,咩哈哈)

或者上古时期也比较常见的自己搭建本地文件服务器

文件配置支持按照多租户或多商户的方式配置多个,非常利于扩展。
文件配置设置好以后,通过和应用或者系统的绑定关系:

这样我们的应用就可以使用文件平台提供的文件管理功能了,是不是so easy?
二、文件管理
应用使用文件平台提供的公共服务组件,轻松实现图片、pdf、压缩包等文件的自动上传功能,业务系统只要在自己的系统保留业务编号和文件平台的主键关系,可以调用文件平台公共的查询API轻松实现文件查看等功能。
1、上传文件管理

2、文件预览
通常特定格式的文件上传后都支持直接在浏览器里预览,比如图片、pdf、excel等格式的文件,当然我还单独为图片开发简易图片预览功能。

3、上传补偿
支持针对特殊情况进行文件上传补偿,比如业务数据变化导致文件需要更新、文件上传很久数据迁移丢失等。

文件平台还支持特定领域一些特殊业务逻辑,如通过OCR组件生成文件异步上传、文件错误重试、按模板自动生成文件等功能,这个不是本文重点,我个人用.NET和Java都开发过,顺带一提,咩哈哈。
参考:
https://help.aliyun.com/document_detail/31817.html
https://github.com/aliyun/aliyun-oss-csharp-sdk
https://github.com/aliyun/alibabacloud-csharp-sdk
https://github.com/happyfish100
https://www.cnblogs.com/dubing/archive/2012/01/09/2316903.html
https://www.cnblogs.com/Leo_wl/p/6731647.html
PowerDotNet平台化软件架构设计与实现系列(10):文件平台的更多相关文章
- PowerDotNet平台化软件架构设计与实现系列(03):系统应用平台
为了复用和解耦,快速开发更多的系统和应用,我们对自己经常说的"系统"和"应用"进行更高级的提取和抽象. 十多年前入行,辗转至今,写过很多很多应用,个人喜欢分门别 ...
- PowerDotNet平台化软件架构设计与实现系列(01):基础数据平台
本系列我将主要通过图片和少许文字讲解通过个人自研的PowerDotNet进行快速开发平台化软件产品. PowerDotNet不仅仅是包含像Newtonsoft.Json.Dapper.Quartz.R ...
- PowerDotNet平台化软件架构设计与实现系列(02):数据库管理平台
为了DB复用和简化管理,我们对常见应用依赖的DB模块进行更高级的提取和抽象. 虽然一些ORM可以简化DB开发,但是我们还是需要进行改进和优化,否则应用越多,后期管理运维越混乱. 根据常见开发需要,数据 ...
- PowerDotNet平台化软件架构设计与实现系列(05):ETCD分布式键值存储平台
ETCD目前在PowerDotNet已经被用于注册中心和配置管理(常见的配置中心在PowerDotNet中仅仅是一个小小的模块而已)中,作为基础设施的重要组成部分,ETCD的重要性不言而喻. 本文简单 ...
- PowerDotNet平台化软件架构设计与实现系列(12):HCRM人员管理平台
技术服务于业务,良好的技术设计和实现能够大幅提升业务质量和效率. PowerDotNet已经形成了自己的开发风格,很多项目已被应用于生产环境,可行性可用性可靠性都得到了生产环境验证. 编程是非常讲究动 ...
- PowerDotNet平台化软件架构设计与实现系列(13):应用监控平台
本文再写一篇和具体业务逻辑几乎无关的公共服务应用监控平台.PowerDotNet自研的应用监控平台系统,是服务治理的重要拼图,和服务治理平台配合使用效果更好. 监控开源产品非常丰富,站在巨人的肩膀上, ...
- PowerDotNet平台化软件架构设计与实现系列(04):服务治理平台
系统和系统之间,少不了数据的互联互通.随着微服务的流行,一个系统内的不同应用进行互联互通也是常态. PowerDotNet的服务治理平台发源于早期的个人项目Power.Apix.这个项目借鉴了工作过的 ...
- PowerDotNet平台化软件架构设计与实现系列(08):缓存平台
几乎所有后端应用都会或多或少用到缓存,尤其是分布式缓存服务,以及和本地缓存构造的二级缓存.根据我们一贯的节约代码的风格,为了复用的目标,抽象出缓存平台,进行缓存管理. 考虑到很多公司都会自己造或者直接 ...
- PowerDotNet平台化软件架构设计与实现系列(11):日志平台
所有后端应用几乎都会记录日志,日志系统可以统一抽象出来提供服务. 最近被Log4j2的安全漏洞刷屏了,作为开发人员的我只能咩哈哈几次表示日志处理太难了,只有折腾过的人才知道这里面的艰辛啊. 在实现Po ...
随机推荐
- .NET Core如何配置TLS Cipher(套件)?
前言 前不久我发表了一篇关于TLS协议配置被我钻了空子,经过第三方合作伙伴验证,针对此TLS协议存在不安全套件,急催速速解决,那么我们本篇开始继续整活!第三方合作伙伴对平台安全严苛要求,我们已连续发版 ...
- Shell $()、${}、$[]、$(())
目录 Shell中的 $().${}.$[].$(()) $().${} 替换 ${} 变量内容的替换.删除.取代 数组 $[].$(()) 运算符 Shell中的 $().${}.$[].$(()) ...
- 浏览器相关,关于强缓存、协商缓存、CDN缓存。
强缓存和协商缓存 在介绍缓存的时候,我们习惯将缓存分为强缓存和协商缓存两种.两者的主要区别是使用本地缓存的时候,是否需要向服务器验证本地缓存是否依旧有效. 顾名思义,协商缓存,就是需要和服务器进行协商 ...
- AOP中ProceedingJoinPoint获取目标方法,参数,注解
private void saveLog(ProceedingJoinPoint jp,long time)throws Throwable { package com.cy.pj.common.as ...
- echo -e "\033[字背景颜色;字体颜色m字符串\033[0m
格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo -e "\033[41;36m something here \033 ...
- entfrm-boot开发平台功能介绍【entfrm开源模块化无代码开发平台】
简介 entfrm开发平台,是一个以模块化为核心的无代码开发平台,是一个集PC和APP快速开发.系统管理.运维监控.开发工具.OAuth2授权.可视化数据源管理与数据构建.API动态生成与统计.工作流 ...
- Js判断数组中是否存在某个元素
Js判断数组中是否存在某个元素 方法一:indexOf(item,start); Item:要查找的值:start:可选的整数参数,缺省则从起始位子开始查找. indexOf();返回元素在数组中的位 ...
- SpringMvc分析
1.用户单击某个请求路径,发起一个request请求,此请求会被前端控制器(DispatcherServlet)处理 2.前端控制器(DispatcherServlet)请求处理器映射器(Handle ...
- freeswitch APR库线程读写锁
概述 freeswitch的核心源代码是基于apr库开发的,在不同的系统上有很好的移植性. 线程读写锁在多线程服务中有重要的作用.对于读数据比写数据频繁的服务,用读写锁代替互斥锁可以提高效率. 由于A ...
- kubeadm安装k8s集群
安装kubeadm kubectl kubelet 对于Ubuntu/debian系统,添加阿里云k8s仓库key,非root用户需要加sudo apt-get update && a ...