.NET Core

.NET Core Web APi大文件分片上传研究

我是研究僧i 提交于 2020-08-10 15:53:15
前言 前两天发表利用FormData进行文件上传,然后有人问要是大文件几个G上传怎么搞,常见的不就是分片再搞下断点续传,动动手差不多也能搞出来,只不过要深入的话,考虑的东西还是很多。由于断点续传之前写个几篇,这里试试利用FormData来进行分片上传。 .NET Core Web APi文件分片上传 这里我们依然是使用FormData来上传,只不过在上传之前对文件进行分片处理,如下HTML代码 < div class ="form-horizontal" style ="margin-top:80px;" > < div class ="form-group" > < div class ="col-md-10" > < input name ="file" id ="file" type ="file" /> </ div > </ div > < div class ="form-group" > < div class ="col-md-offset-2 col-md-10" > < input type ="submit" id ="submit" value ="上传" class ="btn btn-success" /> </ div > </ div > </ div > 接下来则是上传脚本,如下: $( function () { $( '#submit')

dotnet 配合 GitHub 的 Action 做自动推 Tag 时打包 NuGet 包

陌路散爱 提交于 2020-08-10 15:38:27
被微软收购的 GitHub 越来越好用,拥有大量免费的工具资源和构建服务器资源,再加上私有项目的无限制使用,我有大量的项目都在向 GitHub 迁移。通过 GitHub 的 Action 的自动构建,可以用上微软土豪的服务器资源,进行自动化测试和构建。对于 CBB 来说,发布就是打出 NuGet 包然后上传到内部 NuGet 服务器。此时遇到的问题是,如何在 GitHub 上执行打包,打包的时候如何指定 NuGet 包的版本号。因为 CBB 的特殊性,我要求每个 NuGet 正式发布的包都应该有一个对应的 Tag 号,这样将 NuGet 库安装到项目里面,之后发现问题了还能找到对应版本的代码 在阅读本文之前,期望小伙伴能了解如何在 dotnet 下使用 GitHub 的 Action 进行自动构建,请看 dotnet 部署 github 的 Action 进行持续集成 而发布 NuGet 包的方法请看 dotnet 配置 github 自动打包上传 nuget 文件 本文将在此基础上实现本地推送一个 Tag 到 GitHub 服务器上,就会触发 GitHub 的 Action 的自动构建,自动构建的 NuGet 包的版本就是 Tag 版本。为什么需要在推 Tag 打包,请看 dotnet CBB 为什么决定推送 Tag 才能打包 本文将用到一个 dotnet tool 工具,在

.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)

北城余情 提交于 2020-08-10 13:29:43
前言 上一篇【 .Net Core微服务入门全纪录(一)——项目搭建 】讲到要做到服务的灵活伸缩,那么需要有一种机制来实现它,这个机制就是服务注册与发现。当然这也并不是必要的,如果你的服务实例很少,并且很稳定,那么就没有必要使用服务注册与发现。 服务注册与发现 服务注册:简单理解,就是有一个注册中心,我们的每个服务实例启动时,都去注册中心注册一下,告诉注册中心我的地址,端口等信息。同样的服务实例要删除时,去注册中心删除一下,注册中心负责维护这些服务实例的信息。 服务发现:既然注册中心维护了各个服务实例的信息,那么客户端通过注册中心就很容易发现服务的变化了。 有了服务注册与发现,客户端就不用再去配置各个服务实例的地址,改为从注册中心统一获取。 那注册中心又是怎么保证每个地址的可用状态呢,假如某个实例挂了怎么办呢?原则上挂掉的实例不应该被客户端获取到,所以就要提到:健康检查 。 健康检查:每个服务都需要提供一个用于健康检查的接口,该接口不具备业务功能。服务注册时把这个接口的地址也告诉注册中心,注册中心会定时调用这个接口来检测服务是否正常,如果不正常,则将它移除,这样就保证了服务的可用性。 常见注册中心有 Consul、ZooKeeper、etcd、Eureka。 Consul Consul官网: https://www.consul.io/ Consul的主要功能有服务注册与发现

基于Docker的Consul服务发现集群搭建

与世无争的帅哥 提交于 2020-08-10 10:05:12
在去年的 .NET Core微服务系列文章 中,初步学习了一下Consul服务发现,总结了 两篇文章 。本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架构示范,也会更加贴近于实际应用环境。 一、示例整体架构   此示例会由一个API Gateway, 一个Consul Client以及三个Consul Server组成,有关Consul的Client和Server这两种模式的Agent的背景知识,请移步我之前的文章加以了解:《 .NET Core微服务之基于Consul实现服务治理 》。其中,Consul的Client和Server节点共同构成一个Data Center,而API Gateway则从Consul中获取到服务的IP和端口号,并返回给服务消费者。这里的API Gateway是基于Ocelot来实现的,它不是这里的重点,也就不过多说明了,不了解的朋友请移步我的另一篇:《 .NET Core微服务之基于Ocelot实现API网关服务 》。 二、Consul集群搭建 2.1 Consul镜像拉取 docker pull consul:1.4.4   验证:docker images    2.2 Consul Server实例创建   以下我的实践是在一台机器上(CentOS 7)操作的

《ASP.NET Core 开发实战》

百般思念 提交于 2020-08-10 10:01:11
**《ASP.NET Core 开发实战》 ========== ========== ========== [作者] (意) Dino Esposito [译者] (中) 赵利通 [出版] 清华大学出版社 [版次] 2019年07月 第1版 [印次] 2019年12月 第2次 印刷 [定价] 79.80元 ========== ========== ========== 【前言】 (PVI) ASP.NET Core 是 ASP.NET 开发人员需要了解的一种技术,是在多种平台上进行 Web 开发时可供使用的另一种全栈解决方案。 【第01章】 (P006) 对于处理必须返回 HTML 内容的 Web 请求, ASP.NET MVC 编程模型是最灵活、最容易理解的方式。 (P008) .NET Core Framework 主要被设计为用于 ASP.NET 应用程序。 .NET Core Framework 只能用来编写 ASP.NET 和控制台应用程序。 .NET Core Framework 可与应用程序一同部署,而完整的 .NET Framework 只能安装到目标机器上,由所有应用程序共享。 (P009) .NET Core Framework 是从头开始重新设计的一个新框架,看上去与完整的 .NET Framework 很类似,但是能够跨平台工作。 (P010) ASP

基于.NetCore3.1系列 —— 使用Swagger导出文档 (补充篇)

主宰稳场 提交于 2020-08-10 08:54:04
前言 在上一篇 导出文档 番外篇中,我们已经熟悉了怎样根据json数据导出word的文档,生成接口文档,而在这一篇,将对上一篇进行完善补充,增加多种导出方式,实现更加完善的导出功能。 回顾 1. 获取Swagger接口文档的Json文件 2. 解析Json文件数据填充到Html的表格中 3.根据生成的html转work文档 功能 开始 根据生成的html转work文档 /// <summary> /// 静态页面转文件 /// </summary> /// <param name="html"> 静态页面html </param> /// <param name="type"> 文件类型 </param> /// <param name="contenttype"> 上下文类型 </param> /// <returns></returns> public Stream SwaggerConversHtml( string html, string type, out string contenttype) { string fileName = Guid.NewGuid().ToString() + type; // 文件存放路径 string webRootPath = _hostingEnvironment.WebRootPath; string path =

算法面试题:一个List<Student>,要求删除里面的男生,不用Linq和Lamda,求各种解,并说明优缺点!

左心房为你撑大大i 提交于 2020-08-10 08:38:38
算法面试题:一个List ,要求删除里面的男生,不用Linq和Lamda,求各种解,并说明优缺点! 解题思路 这是群里某位小伙伴去面试碰到的面试题,从题目本身来看,面试官应该是要考察面试者对泛型 List 的理解程度,也算是对基础的理解。这里面还是有很多需要考察的知识点,没关系,我们走一步看一步。 首先,题目没有限定数量,我们知道,只谈毒性不谈剂量的都是耍流氓,那我们就假定要处理的数据有 10000 条好了。 数据准备好了 static readonly string text =

将本地构建好的docker镜像发布到dockerhub

扶醉桌前 提交于 2020-08-10 08:23:25
各位读者你们好,上一篇文章介绍了如何将.NET Core项目构建成一个docker镜像,那么今天接下来我们介绍如何将本地docker项目镜像发布到dockerhub上,好了废话不多说,直接进入正题: (1)去注册dockerhub账号; (2)账号注册好之后,我们创建一个仓库,用于存放镜像 (3)到这一步,我们已经可以看到创建成功界面 仓库路径:nbidashboard/nbiplatform (4)查看本地容器信息 sudo docker ps (5)提交容器: sudo docker commit CONTAINER ID nbidashboard/nbiplatform sudo docker push nbidashboard/nbiplatform:latest (6)上传完成后,我们通过命令来验证一下提交的信息是否成功: sudo docker inspect nbidashboard/nbiplatform:latest (7)到这里我们的整个操作已经完成了,在dockerhub已经可以看到我们提供的镜像: 通过两篇文章的讲解,我们已经知道如何将项目打包,如何上传到云端,那么下一篇我们将介绍如何从远程仓库中拉取镜像,运行镜像。 来源: oschina 链接: https://my.oschina.net/u/4319463/blog/4282728

介绍一个基于 .NET 的船新 PHP SDK + Runtime: PeachPie

强颜欢笑 提交于 2020-08-10 08:15:11
前言 这几天想基于 .NET Core 搞一个自己的博客网站,于是在网上搜刮各种博客引擎,找到了这些候选:Blogifier、Miniblog 以及 edi 写的 Moonglate。 Blogifier:这是前端是个 Angular SPA 应用,不利于 SEO,同时首屏加载速度慢,因此排除。 Miniblog:顾名思义 Mini,可以完美承载内容但是主题实在是过于简单,没有可自定义性,因此排除。 Moonglate:总体感觉不错,界面设计得也很好,功能全面,然而需要 SQL Server 作为数据库,然而 SQL Server 虽然有 Linux 版本,但受限于主机配置和预算因此也被排除。 难道就没有适合我需求的博客引擎了吗?答案当然是:有。 众所周知 PHP 是世界上最好的语言(滑稽),还是众所周知有一个叫做 WordPress 的博客引擎生态非常庞大,而且是使用 PHP 构建的。 可是 PHP 和 .NET 又有什么关系呢? PeachPie PeachPie 是一个完全构建于 .NET Standard 之上的一套完整的 PHP SDK + Runtime,包含编译器和运行时等等,兼容 PHP 5.4-7.4(当然部分功能仍在开发中)。 官网: https://www.peachpie.io 那么 PeachPie 有什么优点呢: 开源: https://github

C# 使用 WebBrowser 实现 HTML 转图片功能

两盒软妹~` 提交于 2020-08-10 07:24:22
在 .NET 平台上,我们有多种方式可以将一段 HTML 文本转换为一张图片: HTML Renderer 、 SelectPdf 、 Aspose.Html 等。 在 WinForm 程序中,每一个 System.Windows.Forms.Control 的派生类型均包含一个名为 DrawToBitmap 的方法,该方法可以将控件绘制到一张图片上。WebBrowser 具备显示 HTML 的功能,又因为其从 Control 类型派生,所以包含 DrawToBitmap 方法。我们只需将要在 WebBrowser 上加载要展示的 HTML 并在其 DocumentCompleted 事件中绘制图片即可: public static async Task < Image > HtmlToImage ( String html , int width = 1024 , int height = 768 ) { var taskCompletionSource = new TaskCompletionSource < Image >(); var thread = new Thread (() => { using var browser = new WebBrowser { Width = width , Height = height , ScrollBarsEnabled =