很多业务系统少不了需要进行文件管理,比如各种图片、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):文件平台的更多相关文章

  1. PowerDotNet平台化软件架构设计与实现系列(03):系统应用平台

    为了复用和解耦,快速开发更多的系统和应用,我们对自己经常说的"系统"和"应用"进行更高级的提取和抽象. 十多年前入行,辗转至今,写过很多很多应用,个人喜欢分门别 ...

  2. PowerDotNet平台化软件架构设计与实现系列(01):基础数据平台

    本系列我将主要通过图片和少许文字讲解通过个人自研的PowerDotNet进行快速开发平台化软件产品. PowerDotNet不仅仅是包含像Newtonsoft.Json.Dapper.Quartz.R ...

  3. PowerDotNet平台化软件架构设计与实现系列(02):数据库管理平台

    为了DB复用和简化管理,我们对常见应用依赖的DB模块进行更高级的提取和抽象. 虽然一些ORM可以简化DB开发,但是我们还是需要进行改进和优化,否则应用越多,后期管理运维越混乱. 根据常见开发需要,数据 ...

  4. PowerDotNet平台化软件架构设计与实现系列(05):ETCD分布式键值存储平台

    ETCD目前在PowerDotNet已经被用于注册中心和配置管理(常见的配置中心在PowerDotNet中仅仅是一个小小的模块而已)中,作为基础设施的重要组成部分,ETCD的重要性不言而喻. 本文简单 ...

  5. PowerDotNet平台化软件架构设计与实现系列(12):HCRM人员管理平台

    技术服务于业务,良好的技术设计和实现能够大幅提升业务质量和效率. PowerDotNet已经形成了自己的开发风格,很多项目已被应用于生产环境,可行性可用性可靠性都得到了生产环境验证. 编程是非常讲究动 ...

  6. PowerDotNet平台化软件架构设计与实现系列(13):应用监控平台

    本文再写一篇和具体业务逻辑几乎无关的公共服务应用监控平台.PowerDotNet自研的应用监控平台系统,是服务治理的重要拼图,和服务治理平台配合使用效果更好. 监控开源产品非常丰富,站在巨人的肩膀上, ...

  7. PowerDotNet平台化软件架构设计与实现系列(04):服务治理平台

    系统和系统之间,少不了数据的互联互通.随着微服务的流行,一个系统内的不同应用进行互联互通也是常态. PowerDotNet的服务治理平台发源于早期的个人项目Power.Apix.这个项目借鉴了工作过的 ...

  8. PowerDotNet平台化软件架构设计与实现系列(08):缓存平台

    几乎所有后端应用都会或多或少用到缓存,尤其是分布式缓存服务,以及和本地缓存构造的二级缓存.根据我们一贯的节约代码的风格,为了复用的目标,抽象出缓存平台,进行缓存管理. 考虑到很多公司都会自己造或者直接 ...

  9. PowerDotNet平台化软件架构设计与实现系列(11):日志平台

    所有后端应用几乎都会记录日志,日志系统可以统一抽象出来提供服务. 最近被Log4j2的安全漏洞刷屏了,作为开发人员的我只能咩哈哈几次表示日志处理太难了,只有折腾过的人才知道这里面的艰辛啊. 在实现Po ...

随机推荐

  1. kubectl logs查看日志时出现failed to create fsnotify watcher: too many open files

    因为系统默认的 fs.inotify.max_user_instances=128 太小,在查看日志的pod所在节点重新设置此值: 临时设置 sudo sysctl fs.inotify.max_us ...

  2. 26. Linux GIT

    windows git 下载链接: Msysgit   https://git-scm.com/download/win 1 进入git bash进行第一次配置 git config --global ...

  3. 商业爬虫学习笔记day6

    一. 正则解析数据 解析百度新闻中每个新闻的title,url,检查每个新闻的源码可知道,其title和url都位于<a></a>标签中,因为里面参数的具体形式不一样,同一个正 ...

  4. 通信方案软件设计(环形动态申请内存,支持USART+IIC+SPI+CAN协议

    1 <STM32进阶之串口环形缓冲区实现>中讲得比较清楚(链接) 2 amobbs中讲的方法有点复杂,以下是链接和参考源码: 通信方案软件设计(环形动态申请内存,支持USART+IIC+S ...

  5. Android 高级UI组件(三)

    一.popupWindow 1.AlertDialog和PopupWindow最关键的区别是AlertDialog不能指定显示位置,只能默认显示在屏幕最中间(当然也可以通过设置WindowManage ...

  6. vue2 页面路由

    vue官方文档 src/views/Login.vue <template> <div> <h2>登录页</h2> </div> </ ...

  7. Spring 的 init-method 和 destory-method

    关于在spring  容器初始化 bean 和销毁前所做的操作定义方式有三种 第一种注解: 通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 ...

  8. 【Java 基础】Arrays.asList、ArrayList的subList注意事项

    1. 使用Arrays.asList的注意事项 1.1 可能会踩的坑 先来看下Arrays.asList的使用: List<Integer> statusList = Arrays.asL ...

  9. 【C/C++】算法入门:排序/算法笔记

    (设排序从小到大) 冒泡排序 这个大家都会,从第一个开始往后俩俩交换,然后第二个,最后到最后一个,复杂度n^2 选择排序 思路和冒泡差不多,比如要得到从小到大的排序,就是从第一个开始,i取1~n,每次 ...

  10. numpy基础教程--将二维数组转换为一维数组

    1.导入相应的包,本系列教程所有的np指的都是numpy这个包 1 # coding = utf-8 2 import numpy as np 3 import random 2.将二维数组转换为一维 ...