All posts by 龙生

在线查看PDF文件,pdf.js使用方法

PDF.js可以实现在html下直接浏览pdf文档,是一款开源的pdf文档读取解析插件,非常强大,能将PDF文件渲染成Canvas。PDF.js主要包含两个库文件,一个pdf.js和一个pdf.worker.js,一个负责API解析,一个负责核心解析。 首先引入pdf.js文件<script type="text/javascript" src=’pdf.js'></script> PDF.js大部分用法都是基于Promise的,PDFJS.getDocument(url)方法返回的就是一个Promise:

PDF的解析工作需要通过pdf.getPage(page)去执行,这个方法返回的也是一个Promise,因此可以去逐页解析PDF:

官网地址:http://mozilla.github.io/pdf.js/ 渲染页面 各PDF页面有它自己的视窗,它定义了像素大小(n.72dpi和初始旋转。默认情况下,该窗口将缩放到PDF但是通过修改视图可以更改此操作。当创建了视图时,还会创建一个初始转换矩阵,它考虑到期望的规模、旋转,并转换坐标系统(0点)PDF文档底部左边,而画布0是 左。

官方给出的示例:

  另外较大的PDF文件可以用base 64编码方式加载,例如:

  pdf翻页处理:

    关于page方式的使用: 解析结果,我们可以看下这个对象提供的方法: 方法 返回 getAnnotations A promise that is resolved with an {Array} of the annotation objects. getTextContent That is resolved a TextContent object that represent the page text content. getViewport Contains ‘width’ and ‘height’ properties along with transforms required for rendering. render An object that contains the promise, which is resolved when the page finishes rendering. 我们可以试试调用getTextContent方法,并将其结果打印出来:

输入格式大致如下:

PDF.js能将每页文本的字符串、位置、字体都解析出来。 官网用的viewer.js:http://mozilla.github.io/pdf.js/web/viewer.html,首先底图是一个Canvas,内容和PDF一样(通过下面介绍的page.render方法可以得到),底图之上是一个textLayer,这一层就是通过page.getTextContent()得到了字体的位置和样式,再覆盖在Canvas上。 […]

龙生   04 Sep 2019
View Details

Asp .Net Core 2.0 登录授权以及多用户登录

用户登录是一个非常常见的应用场景 .net core 2.0 的登录方式发生了点变化,应该是属于是良性的变化,变得更方便,更容易扩展。 配置 打开项目中的Startup.cs文件,找到ConfigureServices方法,我们通常在这个方法里面做依赖注入的相关配置。添加如下代码:

这段代码的大概意思就是,添加授权支持,并添加使用Cookie的方式,配置登录页面和没有权限时的跳转页面。 再找到Configure方法,添加 app.UseAuthentication(),使用授权:

这样基本的配置就完成了。 登录 添加一个Controller,如AccountController,再添加一个Action,如 Login,所配置的路由,要与上面的配置对应,不然跳转登录时会跳错页面。 用户提交用户名和密码,登录代码大致如下:

这里要注意的是 AuthenticationType 所设置的Scheme一定要与前面的配置一样,这样对应的登录授权才会生效。 使用登录身份 登录的目录,就是希望有些页面或者资源只有登录以后才可访问。使用AuthorizeAttribute来做限制。在需要做限制的Controller上加上[Authorize]特性来做限制。

这样这个Controller下的所有的Action都必需要登录后才可访问。如果希望其中某些Action可以不用登录也可访问,可以添加例外:

到这里一个最基础的登录就完成了。 在Web项目中,通常会遇到一个问题,后端管理员和前台用户。这两个用户都是可登录的,在 .net core 2.0,这个将很容易实现。 多用户登录 添加一个登录方案(Scheme) CookieAuthenticationDefaults.AuthenticationScheme,这是系统已经定义好的一个默认的登录方案,添加一个新的来实现一个不同的身份登录。代码如下:

添加使用这个新的方案,在Startup.cs文件下:

添加新的登录方案,并配置一个新的登录页面,登录的方法和刚才是一样,只是AuthenticationType使用了新的方案。

验证登录状态 使用方法和之前的差不多,换成新的CustomerAuthorizeAttribute就行了:

CustomerAuthorizeAttribute这个类,不是必需的,只是为了方便使用而写,其实完全可以只定义一个新的方案(Scheme)就行了。 谁才是HttpContext.User? 登录了多个用户,那么谁才是HttpContext.User呢?如果你的Controller或者Action上有使用AuthorizeAttribute,那这个Attribute使用的登录方案是哪个,则这个HttpContext.User对应的就是那个方案的登录用户。如果没有使用,则AddAuthentication()方法默认指它的方案(Scheme)所登录的用户,就是这个HttpContext.User了。 如何获取对应方案的登录用户呢?使用HttpContext.AuthenticateAsync

退出登录 这个就简单了,指定方案退出就可以了。

from:http://www.zkea.net/codesnippet/detail/asp-net-core-multi-login-user.html

龙生   02 Sep 2019
View Details

ASP.NET CORE中使用Cookie身份认证

大家在使用ASP.NET的时候一定都用过FormsAuthentication做登录用户的身份认证,FormsAuthentication的核心就是Cookie,ASP.NET会将用户名存储在Cookie中。 现在到了ASP.NET CORE的时代,但是ASP.NET CORE中没有FormsAuthentication这个东西,那么怎么做身份认证呢?答案是ASP.NET CORE已经为我们内置了Cookie身份认证的功能,而且使用起来非常方便,注意本文是基于ASP.NET CORE 2.0版本来阐述Cookie认证方式的。   1.从ASP.NET CORE OWIN框架中启用Cookie身份认证功能 要在ASP.NET CORE中使用Cookie身份认证,第一步就是在项目中的OWIN框架文件Startup.cs中启用Cookie身份认证中间件。 首先我们在Startup中的ConfigureServices方法中使用services.AddAuthentication注册Cookie认证服务,如下代码所示:

然后在Startup中的Configure方法中使用app.UseAuthentication启用Cookie认证中间件(注意其中app.UseAuthentication和app.UseMvc的调用顺序不能反),如下代码所示:

这里顺便说一下app.UseAuthentication是用来干什么的,app.UseAuthentication会启用Authentication中间件,该中间件会根据当前Http请求中的Cookie信息来设置HttpContext.User属性(后面会用到),所以只有在app.UseAuthentication方法之后注册的中间件才能够从HttpContext.User中读取到值,这也是为什么上面强调app.UseAuthentication方法一定要放在下面的app.UseMvc方法前面,因为只有这样ASP.NET Core的MVC中间件中才能读取到HttpContext.User的值。     2.登录用户 在ASP.NET CORE中使用Cookie认证登录用户的方法和传统的FormsAuthentication不太一样,大致步骤如下: 创建Claim类型的数组,将登录用户的所有信息(比如用户名)存储在Claim类型的字符串键值对中 将上面创建的Claim类型的数组传入ClaimsIdentity中,用来构造一个ClaimsIdentity对象 将上面创建的ClaimsIdentity对象传入ClaimsPrincipal中,用来构造一个ClaimsPrincipal对象 调用HttpContext.SignInAsync方法,传入上面创建的ClaimsPrincipal对象,完成用户登录 所以我们可以看到整个ASP.NET CORE的Cookie认证登录流程比以前ASP.NET的FormsAuthentication还是要复杂许多,毕竟以前一个FormsAuthentication.SetAuthCookie方法就搞定了。   在本文的例子中我们在项目中默认的HomeController中创建了一个Acion方法Login,来实现用户登录的代码。当然这里我们实现的是最简的Cookie登录,下面代码中实际上还可以设置Cookie是否持久化、Cookie多久过期、存储登录用户信息的Cookie的名字是什么等,我们就不做过多介绍了,大家可以阅读本文最后推荐的两份官方文档了解更多。 Login方法的代码如下:

  如果当前Http请求本来登录了用户A,现在调用HttpContext.SignInAsync方法登录用户B,那么相当于注销用户A,登录用户B     3.读取登录用户信息 那么用户登录后怎么将登录用户的信息(比如用户名)读取出来呢?我们在HomeController的Index方法中演示了如何判断当前用户是否已经登录,并且读出登录用户的用户名,Index方法的代码如下所示:

注意,最好还是用HttpContext.User.Identity.IsAuthenticated来判断用户是否已经登录     4.注销用户 那么登录用户后怎么注销登录呢?我们在HomeController的Logout方法中演示了如何注销登录的用户,代码如下所示:

如果当前Http请求本来就没有登录用户,那么调用HttpContext.SignOutAsync方法时也不会报错     5.负载均衡   警告: ASP.NET Core使用 ASP.NET Core data protection stack 来实现Cookie身份认证。如果在服务器集群中必须配置 ASP.NET Core Data Protection,有关详细信息,请参阅 Configuring data protection。如果你的ASP.NET Core站点使用了负载均衡部署了多个实例,就要做ASP.NET Core Data Protection的配置,否则ASP.NET CORE跨多个实例进行Cookie身份认证会失败。 还可以参考:Host ASP.NET Core in a web farm 以及 Share authentication cookies among ASP.NET apps 如何管理ASP.NET Core Data Protection的过期key,可以查看:Data Protection – […]

龙生   02 Sep 2019
View Details

php-浮点数计算,double类型数加减乘除必须用PHP提供的高精度计算函数

一、前方有坑 php在使用加减乘除等运算符计算浮点数的时候,经常会出现意想不到的结果,特别是关于财务数据方面的计算,给不少工程师惹了很多的麻烦。比如今天工作终于到的一个案例: $a = 2586; $b = 2585.98; var_dump($a-$b); 期望的结果是:float(0.02) 实际结果: float(0.019999999999982)   人生有坑,处处提防 二、防坑攻略: 1、通过乘100的方式转化为整数加减,然后在除以100转化回来…… 2、使用number_format转化成字符串,然后在使用(float)强转回来…… 3、php提供了高精度计算的函数库,实际上就是为了解决这个浮点数计算问题而生的。 主要函数有: bcadd — 将两个高精度数字相加 bccomp — 比较两个高精度数字,返回-1, 0, 1 bcdiv — 将两个高精度数字相除 bcmod — 求高精度数字余数 bcmul — 将两个高精度数字相乘 bcpow — 求高精度数字乘方 bcpowmod — 求高精度数字乘方求模,数论里非常常用 bcscale — 配置默认小数点位数,相当于就是Linux bc中的”scale=” bcsqrt — 求高精度数字平方根 bcsub — 将两个高精度数字相减 前两种流氓的办法就不测试了,使用bcsub测试第三种两数相减的例子, 先看bcsub用法(来自官网) string bcsub ( string $left_operand , string $right_operand [, int $scale = int ] ) 参数 left_operand 字符串类型的左操作数. right_operand 字符串类型的右操作数. scale 此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。 返回值 返回减法之后结果为字符串类型. 测试代码: var_dump(bcsub($a,$b,2)); 结果 0.02 其他的函数请参考PHP官方网站 三、为啥有坑: php的bug?不是,这是所有语言基本上都会遇到的问题,所以基本上大部分语言都提供了精准计算的类库或函数库。 要搞明白这个原因, […]

龙生   26 Aug 2019
View Details

ab压力测试工具

 

 

 

 

  安装ab测试工具

  ab工具帮助 ab是Apache超文本传输协议(HTTP)的性能测试工具。其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求。

  使用举例:

  from:https://www.e-learn.cn/content/linux/1134148

龙生   21 Aug 2019
View Details

超实用压力测试工具-ab工具

写在前面 在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。 计算公式:总请求数 / 处理完成这些请求数所花费的时间,即 Request per second = Complete requests / Time taken for tests 并发连接数(The number of concurrent connections) 概念:某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。 并发用户数(The number of concurrent users,Concurrency Level) 概念:要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。 用户平均请求等待时间(Time per request) 计算公式:处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即 Time per request = Time taken for tests /( Complete requests / Concurrency Level) 服务器平均请求等待时间(Time per request: across all concurrent requests) 计算公式:处理完成所有请求数所花费的时间 / 总请求数,即 Time taken for / testsComplete requests 可以看到,它是吞吐率的倒数。 同时,它也=用户平均请求等待时间/并发用户数,即 Time per request / Concurrency Level ab工具简介 ab全称为:apache bench 在官网上的解释如下: ab是Apache超文本传输协议(HTTP)的性能测试工具。其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求。 其他网站解释: ab是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。 下载ab工具 进入apache官网 http://httpd.apache.org/ 下载apache即可 启动ab工具 […]

龙生   21 Aug 2019
View Details

10个视频剪辑软件,你值得拥有

HitFilm 3 Express 适用平台:Windows/Mac OS HitFilm 3 Express可以说是目前市面上最好的免费视频剪辑软件,除了基础的视频剪辑功能外,你还可以用它来制作动画、2D或者3D建模、或者添加特效。该软件免费版本包含完整的视频剪辑功能、内建100个特效、动态跟踪等功能,当然你也可以通过内购下载额外的过场动画和特效。  DaVinci Resolve 12 适用平台:Windows/Mac OS DaVinci Resolve 12.5是一个将专业的视频剪辑功能和调色系统集于一身的软件,它支持不限分辨率的窗口缩放,可在现场、狭小工作室使用。和HitFilm 3 Express相比DaVinci在视频剪辑和动画制作方面并不出色,假如你更倾向调色后期那么DaVinci肯定是你的不二选择。  视频转换器 适用平台:Windows 视频转换器的主要功能是转换音视频的格式,以及合并分割软件,它采用高效的超线程转换技术,兼容多种主流移动设备格式;极大地提高了视频格式转换的效率,大多数视频转换器都束手无策的qlv、qsv格式视频它也可以轻松转换格式。  视频合并分割软件 视频合并分割软件也是一款支持视频合并分割的软件,与上面的视频转换器不同的是,它可以为视频添加转场效果,软件包含多种转场效果,可以满足大家制作炫酷的视频哦!  Movie Maker 适用平台:Windows Movie Maker Live是windows附带的一个影视剪辑小软件,它功能比较简单,可以组合镜头,声音,加入镜头切换的特效,只要将镜头片段拖入就行,很简单,适合家用摄像后的一些小规模的处理,操作简单非常适合视频剪辑小白使用。  iMoive 适用平台:Mac OS iMovie是一款由苹果电脑编写的视频剪辑软件,之后于WWDC 2010推出了iOS版本。iMovie’11是目前最新的版本,新增功能有影片预告、全新音频编辑、一步特效、人物查找器、运动与新闻主题、全球首映等等,imovie免费且容易上手,不过你得花钱买一台昂贵的Mac。 Lightworks 适用平台:Windows, Mac OS, Linux 在HitFilm 3 Express上市之前Lightworks一直都是视频剪辑爱好者的第一选择,它在2011年的时候成为了一款开源软件并提供免费下载,唯一的缺点就是免费版最高只能导出720P的视频。  ivsEdits LE 适用平台:Windows LE是ivsEdits的免费版本,它支持处理4K级别的视频并且可以以无损的格式(AVI、MOV)导出,尽管免费版会有种种限制你仍然可以通过第三方插件完成你所需的操作。  Shotcut 适用平台:Windows, Mac, Linux 及其简洁、易上手的视频剪辑软件,开源、免费。适合初学者或者是不喜欢特别复杂操作的用户使用。 Avid Free DV 适用平台:Windows Avid Free DV是专业视频剪辑软件Avid video editor的免费版本,然而在AVE收购了Pinnacle后他们停止了对这款软件的维护,不过你仍然可以在百度上找到免费下载的版本。不过Avid Free DV不适合业余视频剪辑爱好者。

龙生   20 Aug 2019
View Details

从某广告软文上摘下来的PHP程序员的进阶图谱

第一阶段1-2年   第二阶段2-3年   第三阶段3-5年

龙生   20 Aug 2019
View Details

CentOS7安装k8s

借鉴博客:https://www.cnblogs.com/xkops/p/6169034.html 此博客里面有每个k8s配置文件的注释:https://blog.csdn.net/qq_35904833/article/details/78190257   啊西吧,啊西吧,根据上面的博客终于安装成功了。妈的,网上大部分博客安装k8s配置写得乱七八槽的,终于找到一篇条理清晰,安装详细的k8s安装博客啦,哈哈哈哈,不容易啊快三个星期了,从狗屁不懂搞这玩意。   下面写一写我自己的安装流程:   一、安装准备: 准备两台服务器(我用的是CentOS7系统):192.168.26.227,192.168.26.228 一主一从: master机:192.168.26.227 node机:192.168.26.228     简单说一下k8s:         k8s是个什么玩意? 可以这样去理解:k8s全称:Kubernetes,它可以看作是一个分布式系统支撑平台。           我们为什么要用k8s集群? 故障自愈: k8s这个玩意可以监控容器运行,我们把项目放到容器里。由于一些外部内部原因服务器承受不住压力,如果主节点上的容器突然挂了,k8s立刻会自己将主机上的服务调度到另一个node机器上运行 应用更新: 更新项目上线时不用中断当前项目的运行。   还有一些自动扩容,缩容的概念就不讲了,我本人也没亲身体会用过,不好说。             k8s的全生命周期管理: 在k8s进行管理应用的时候,基本步骤是:创建集群,部署应用,发布应用,扩展应用,更新应用。          k8s的主要组件,以及它们主要是用来干什么的: etcd:一款开源软件。提供可靠的分布式数据存储服务,用于持久化存储K8s集群的配置和状态   apiservice:用户程序(如kubectl)、K8s其它组件之间通信的接口。K8s其它组件之间不直接通信,而是通过API server通信的。这一点在上图的连接中可以体现,例如,只有API server连接了etcd,即其它组件更新K8s集群的状态时,只能通过API server读写etcd中的数据。   Scheduler:排程组件,为用户应用的每一可部署组件分配工作结点。   controller-manager:执行集群级别的功能,如复制组件、追踪工作结点状态、处理结点失败等。Controller Manager组件是由多个控制器组成的,其中很多控制器是按K8s的资源类型划分的,如Replication Manager(管理ReplicationController 资源),ReplicaSet Controller,PersistentVolume controller。   kube-proxy:在应用组件间负载均衡网络流量。   kubelet:管理工作结点上的容器。   Contriner runtime Docker, rkt等实际运行容器的组件   上面都是些k8s集群所要用到的组件,具体这些组件都是用来干嘛的呢,我们来好好分析分析。 master主机上192.168.26.277必须要有的组件: etcd  :提供分布式数据存储的数据库吧,用于持久化存储k8s集群的配置和状态 kube-apiserver:api service提供了http rest接口,是整个集群的入口,K8s其它组件之间不直接通信,而是通过API server通信的。(只有API server连接了etcd,即其它组件更新K8s集群的状态时,只能通过API server读写etcd中的数据) kube-scheduler:scheduler负责资源的调度 kube-controller-manager:整个集群的管理控制中心,此组件里面是由多个控制器组成的,如:Replication Manager(管理ReplicationController 资源),ReplicaSet Controller,PersistentVolume controller。主要作用用来复制组件、追踪工作结点状态、处理失败结点   node节点机上192.168.26.228必须要有的组件: flannel:好像是用来支持网络通信的吧 kube-proxy:用来负载均衡网络流量 kubelet:用来管理node节点机上的容器 docker:运行项目镜像容器的组件     2018年11月30日: 今天又看了一些博客,多了一些认识和理解,如下:         k8s的整个集群运行原理:【重点核心知识很重要】 master主机上的kube-controller-manager是整个集群的控制管理中心,kube-controler-manager中的node controller模块 通过apiservice提供的监听接口,实时监控node机的状态信息。 当某个node机器宕机,controller-manager就会及时排除故障并自动修复。   node节点机上的kubelet进程每隔一段时间周期就会调用一次apiservice接口报告自身状态,apiservice接口接受到这些信息后将节点状态更新到ectd中。kubelet也通过apiservice的监听接口监听pod信息,如果监控到新的pod副本被调度绑定到本节点,则执行pod对应的容器的创建和启动,如果监听到pod对象被删除,则删除本节点对应的pod容器。(目前对pod、容器、镜像这些概念还不是很清晰,无法在大脑中构建这都是些什么玩意,先做个笔记记着吧)     […]

龙生   15 Aug 2019
View Details

手把手教你在 windows 系统上安装或卸载 Tomcat 服务

1 准备 下载 tomcat 首先在 tomcat 官网上下载 windows 版本的 tomcat 包。因为只有 windows 版本中才有用于安装或卸载 Tomcat 服务的 service.bat。 解压为文件夹,假设 tomcat 的解压路径为 ${TOMCAT_HOME} 通过命令行,进入 ${TOMCAT_HOME}/bin 2 安装 Tomcat 服务 输入命令:

  这里我们可以把启动类型改为 “自动”,这样如果服务器重启,就会自动启动服务啦。 快速进入 “服务” 列表的方法:win+R 打开运行窗口,然后输入 services.msc 建议把服务的名称加上端口号,这样方便管理哦O(∩_∩)O~ 如果启动服务时报错,查看 tomcat 日志发现是 “不是有效的 Win32 应用程序” 引起的。这可能是操作系统的问题(比如 windows server 2007),这时只需下载一个 32 位的 windows 版的 tomcat 包即可解决。 3 卸载 Tomcat 服务 输入命令:

  是不是很简单呀O(∩_∩)O哈哈~   from:https://blog.csdn.net/deniro_li/article/details/79093390

龙生   08 Aug 2019
View Details
1 151 152 153 414