使用ASP.NET Core进行跨平台Web文档扫描
如果您是C#开发人员,可以使用哪种技术来创建跨平台的Web文档扫描应用程序? 答案是ASP.NET Core和Dynamic Web TWAIN。 在这篇文章中,我将分享如何使用这些技术从头开始构建一个简单的Web应用程序。
真正的跨平台文档扫描解决方案
为什么将Dynamic Web TWAIN用于文档扫描开发?这个功能强大的SDK支持Windows,Linux和macOS。
安装
• ASP.NET Core
• Dynamic Web TWAIN
构建Hello World
如何创建一个新的ASP.NET核心项目? 您可以阅读Microsoft提供的教程。
mkdir aspnetcoreapp
cd aspnetcoreapp
dotnet new -t web
这是一个包含如此多文件的精美Web项目。 让我们用命令行创建一个空项目:
dotnet new
该命令仅生成两个文件Program.cs和project.json。 要将应用程序作为Web服务器运行:
- 修改Program.cs:
using System.IO;using aspnetcoreapp;using Microsoft.AspNetCore.Hosting;namespace ConsoleApplication{public class Program{public static void Main(string[] args){var host = new WebHostBuilder().UseKestrel().UseContentRoot(Directory.GetCurrentDirectory()).UseStartup<Startup>().Build();host.Run();}}}
- 给project.json添加依赖项:
{"version": "1.0.0-*","buildOptions": {"debugType": "portable","emitEntryPoint": true},"dependencies": {},"frameworks": {"netcoreapp1.0": {"dependencies": {"Microsoft.NETCore.App": {"type": "platform","version": "1.0.1"},"Microsoft.AspNetCore.Server.Kestrel": "1.0.1","Microsoft.AspNetCore.StaticFiles": "1.0.0"},"imports": "dnxcore50"}}
}
通过依赖关系,我们可以运行Web服务器并加载静态资源,如HTML文件,CSS文件和图像。
创建Startup.cs:
using System.IO;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;namespace aspnetcoreapp
{public class Startup{public void Configure(IApplicationBuilder app){// app.UseDefaultFiles();// app.UseStaticFiles();app.UseFileServer();}}
}
该代码将index.html作为默认网页加载。
创建默认的静态文件文件夹wwwroot。 将示例代码从**\Samples**复制到此文件夹。 如果要将扫描的文档上载到Web服务器,该怎么办? 映射操作路径并保存文件,如下所示:
using System.IO;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;namespace aspnetcoreapp
{public class Startup{public void Configure(IApplicationBuilder app){// app.UseDefaultFiles();// app.UseStaticFiles();app.UseFileServer();app.Map("/upload", UploadFile);}private static void UploadFile(IApplicationBuilder app){app.Run(async context =>{var files = context.Request.Form.Files;var uploads = Path.Combine(Directory.GetCurrentDirectory(), "uploads");if (!Directory.Exists(uploads)) {Directory.CreateDirectory(uploads);}foreach (var file in files){var filename = file.FileName;using (var fileStream = new FileStream(Path.Combine(uploads, filename), FileMode.Create)){await file.CopyToAsync(fileStream);}}});}}
}
现在运行Web项目:
dotnet restore
dotnet run
访问localhost:5000以在Web浏览器中扫描和上载文档。
使用MVC
如果要采取更多操作,建议使用MVC。 我们来看看如何更改代码。
在project.json中添加依赖项:
{"version": "1.0.0-*","buildOptions": {"debugType": "portable","emitEntryPoint": true},"dependencies": {},"frameworks": {"netcoreapp1.0": {"dependencies": {"Microsoft.NETCore.App": {"type": "platform","version": "1.0.1"},"Microsoft.AspNetCore.Mvc": "1.0.1","Microsoft.AspNetCore.Server.Kestrel": "1.0.1","Microsoft.AspNetCore.StaticFiles": "1.0.0"},"imports": "dnxcore50"}},"buildOptions": {"emitEntryPoint": true,"preserveCompilationContext": true}
}
添加MVC服务并用MVC替换Startup.cs中的路由映射:
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;namespace aspnetcoreapp
{public class Startup{public void Configure(IApplicationBuilder app){app.UseStaticFiles();app.UseMvc(routes =>{routes.MapRoute(name: "default",template: "{controller=Home}/{action=Index}/{id?}");});}// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddMvc();}}
}
默认控制器为Home,默认操作为Index。 让我们将wwwroot/index.html移动到Views/home/index.cshtml。 我不想添加任何代码,但更改文件后缀。 创建用于呈现index.cshtml的Controllers/HomeController.cs:
using Microsoft.AspNetCore.Mvc;namespace aspnetcoreapp.Controllers
{public class HomeController : Controller{public IActionResult Index(){return View();}}
}
到目前为止,我们可以毫无问题地运行和显示网页。 下一步是实现上传文件的功能。
打开index.cshtml并更改操作页面:
var strActionPage = CurrentPath + "upload";
要处理操作页面,我们必须创建Controllers/UploadController.cs:
using Microsoft.AspNetCore.Mvc;
using System.IO;namespace aspnetcoreapp.Controllers
{public class UploadController : Controller{[HttpPost]public void Index(){var files = Request.Form.Files;var uploads = Path.Combine(Directory.GetCurrentDirectory(), "uploads");if (!Directory.Exists(uploads)){Directory.CreateDirectory(uploads);}foreach (var file in files){var filename = file.FileName;using (var fileStream = new FileStream(Path.Combine(uploads, filename), FileMode.Create)){file.CopyTo(fileStream);fileStream.Flush();}}}}
}
就这样。 很简单!
Source Code
https://github.com/dynamsoft-dwt/ASP.NET-Core
使用ASP.NET Core进行跨平台Web文档扫描相关推荐
- 第十四节:Asp.Net Core WebApi生成在线文档-第十九节
一. 基本概念 1.背景 使用 Web API 时,了解其各种方法对开发人员来说可能是一项挑战. Swagger 也称为OpenAPI,解决了为 Web API 生成有用文档和帮助页的问题. 它具有诸 ...
- 从头编写 asp.net core 2.0 web api 基础框架 (2)
上一篇是: 从头编写 asp.net core 2.0 web api 基础框架 (1) Github源码地址是: https://github.com/solenovex/Building-asp. ...
- 从头编写 asp.net core 2.0 web api 基础框架 (1)
工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相 ...
- asp.net core 系列 18 web服务器实现
一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...
- 【转载】从头编写 asp.net core 2.0 web api 基础框架 (1)
工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相 ...
- ASP.NET Core 5.0 Web API 自动集成Swashbuckle
ASP.NET Core 5.0 Web API与开放源代码项目 Swashbuckle.AspNetCore 的维护人员合作,ASP.NET Core API 模板包含对 Swashbuckle 的 ...
- 为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 API
2018 .NET开发者调查报告: .NET Core 是怎么样的状态,这里我们看到了还有非常多的.net开发人员还在观望,本文给大家一个建议.这仅代表我的个人意见, 我有充分的理由推荐.net 程序 ...
- ASP.NET Core之跨平台的实时性能监控(2.健康检查)
前言 上篇我们讲了<如何使用App Metrics 做一个简单的APM监控>,最后提到过健康检查这个东西. 这篇主要就是讲解健康检查的内容. 没看过上篇的,请移步:ASP.NET Core ...
- asp.net core系列 67 Web压力测试工具WCAT
asp.net core系列 67 Web压力测试工具WCAT 原文:asp.net core系列 67 Web压力测试工具WCAT 一.介绍 最近搭建了一套CQRS框架,需要在投入开发前,进行必要的 ...
最新文章
- Application provided invalid, non monotonically increasing dts to muxer in stream 0: -92233720368547
- python 决策树 字符型_Python判断字符串是否xx开始或结尾的示例
- linux编译内核的步骤
- javabean反射改字段内容_JSP第三篇「JavaBean的介绍、JSP的行为--JavaBean」(修订版)...
- mysql数据库下的所有表字段
- 蓝牙设置种常用的Intent
- libiconv android,iconv库 android ndk可运行
- Unity快速入门教程-手机游戏开发前的准备(手机模拟器Simulator)
- 2019-01-19-build-xmr-stak-on-ubuntu
- android 控制手机,如何用Android手机控制另一部手机[详细说明]
- 『论文笔记』Visually Grounded Reasoning across Languages and Cultures
- 【猿说理财】《一》理财需要理由吗
- 爬取沪江网考研词汇并按要求存为txt
- 腾讯起点学院:用户增长训练营
- 课程设计:学生档案管理系统
- 瑞芯微RV1126/1109开发流程之驱动升级
- CH34X linux驱动安装,参考代码例程
- My SQL简介与安装教程_001
- NLP14-基于Gensim中的Doc2Vec的试探
- php伪协议c,文件包含之:php伪协议
热门文章
- ITSS的服务项目经理和服务工程师是否有意义呢?
- Navicat的1577 – Cannot proceed because system tables used by Event Scheduler where found damaged at s
- 给div加边框和颜色
- html js使用svg图标,Vue项目中使用svg图标
- 做自媒体要会用的剪辑工具分享
- 网络游戏需要多大的带宽,延迟又是怎么回事
- 计算机音乐谱牵丝戏,牵丝戏(简单抒情版)
- 校验Ipv4 ipv6的格式 python
- 使用jPlayer实现带广告功能和试听试看功能的MP4/MP3播放
- 一分钟说清:5G网络优化工程师各级别要求