C# 文件上传下载成果实现 文件打点引擎开发

时间:2021-10-17 07:05:20

本文将使用一个NuGet果然的组件技术来实现一个处事器真个文件打点引擎,供给了一些简单的API,来便利的实现文件引擎来对您本身的软件系统的文件进行打点。

在Visual Studio 中的NuGet打点器中可以下载安置,也可以直接在NuGet控制台输入下面的指令安置:

Install-Package HslCommunication

NuGet安置教程 

技术撑持QQ群:592132877 (组件的版本更新细节也将第一时间在群里颁布)

Summary

这个文件打点的引擎实现的成果是对所有客户端上传的文件信息进行打点,客户端在上传或是下载的时候允许进度呈报。如果我们只是显示一个文件发送随处事器上,处事器接收数据后生存到本地,那么这长短常容易实现的,只要对照熟悉网络通信就可以,,但是对付文件处事器引擎需要的逻辑更多,允许上传特别的信息,包孕文件的上传人,上传日期,下载次数等等信息,然后允许上传的时候不影响下载,可以同时下载,同时上传,而处事器的硬盘IO不进行梗阻,这样实现起来就相当困难了,但是上述所有的成果在使用本组件实现的时候就非常的便利,当客户端进行上传下载的时候更是挪用一个要领就能完成。

本文件引擎的特色是实现了一个文件的读写疏散,无锁读写,也就是说,一个文件内容撑持同时下载,同时上传,甚至下载的时候,进行上传,原有的下载不会受影响。所有的上传,下载,删除都是线程安适的,无论在哪个线程都是便利挪用的。

需求场景:

好比我们要开发一个项目打点系统,如果我们想要实现每个项目允许上传附件,需要撑持便利的下载,删除,上传操纵。

好比我们开发一个设备资料打点系统,除了设备一些自带属性需要创建关系型数据表外,还要撑持附件打点。

好比我们需要实现一个软件的共享文件打点器,在你软件的首页上撑持便利的显示。

再好比小我私家账户的附件打点,小我私家头像打点等等。

一个基于本组件扩展出来的CS架构的根本模版项目,二次基于此进行便利的二次开发,该项目使用了好几处的文件打点:

https://github.com/dathlin/ClientServerProject

一个C-S模版,该模版由三部分的措施构成,一个处事端运行的措施,一个客户端运行的措施,还有一个大众的组件,实现了根本的账户打点成果,版本控制,软件升级,通告打点,动静群发,共享文件上传下载,批量文件传送成果。具体的操纵要领见演示就行。本项目的一个方针是:供给一个根本的中小型系统的C-S框架,客户端有四种模式,无缝集成访谒,winform版本,wpf版本,asp.net mvc版本,Android版本。便利企业进行中小型系统的二次开发和小我私家学习。

Reference

日志组件所有的成果类都在 HslCommunicationHslCommunication.Enthernet 定名空间,所以再使用之前先添加

using HslCommunication; using HslCommunication.Enthernet;

  How to Use

首先先要在处事器端进行搭建处事,根基上只需要两个参数即可,端标语和文件引擎的根本路径。至于日志,可要可不要,看本身的需求,系统会对文件的下载,上传,异常情况进行记录。

我们先上处事器的代码,假设需要日志记录,如果你不需要的话,就注释失那两行日志相关的代码,系统也可以实现对指定分类的文件数量进行监视,当数量变革的时候进行更新推送等等。ok,接下来先看看一种最简单的方法。

private UltimateFileServer ultimateFileServer; // 引擎东西 private void UltimateFileServerInitialization() { ultimateFileServer = new UltimateFileServer(); // 实例化东西 ultimateFileServer.FilesDirectoryPath = Application.StartupPath + @"\UltimateFile"; // 所有文件存储的根本路径 ultimateFileServer.ServerStart(34567); // 启动一个端口的引擎 } private void userButton1_Click(object sender, EventArgs e) { // 点击了启动处事器真个文件引擎 UltimateFileServerInitialization(); userButton1.Enabled = false; }

声明一个处事器真个东西,然后写一个初始化要领来实例化数据,然后在一个按钮中挪用这个初始化要领即可。处事器真个措施简单版就只有这么多了。

客户端操纵: 实例化:

客户端在进行文件的上传,下载之前先进行客户真个实例化,实例化的时候可以指定一些信息,目前测试来说,不需要。

#region 客户端核心引擎 private IntegrationFileClient integrationFileClient; // 客户真个核心引擎 private void IntegrationFileClientInitialization() { // 界说连接处事器的一些属性,超不时间,IP及端口信息 integrationFileClient = new IntegrationFileClient() { ConnectTimeout = 5000, ServerIpEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("127.0.0.1"), 34567), }; // 创建本地文件存储的路径 string path = Application.StartupPath + @"\Files"; if(!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } } #endregion

上传文件: