如果您是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服务器运行:

  1. 修改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();}}}
  1. 给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文档扫描相关推荐

  1. 第十四节:Asp.Net Core WebApi生成在线文档-第十九节

    一. 基本概念 1.背景 使用 Web API 时,了解其各种方法对开发人员来说可能是一项挑战. Swagger 也称为OpenAPI,解决了为 Web API 生成有用文档和帮助页的问题. 它具有诸 ...

  2. 从头编写 asp.net core 2.0 web api 基础框架 (2)

    上一篇是: 从头编写 asp.net core 2.0 web api 基础框架 (1) Github源码地址是: https://github.com/solenovex/Building-asp. ...

  3. 从头编写 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的相 ...

  4. asp.net core 系列 18 web服务器实现

    一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...

  5. 【转载】从头编写 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的相 ...

  6. ASP.NET Core 5.0 Web API 自动集成Swashbuckle

    ASP.NET Core 5.0 Web API与开放源代码项目 Swashbuckle.AspNetCore 的维护人员合作,ASP.NET Core API 模板包含对 Swashbuckle 的 ...

  7. 为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 API

    2018 .NET开发者调查报告: .NET Core 是怎么样的状态,这里我们看到了还有非常多的.net开发人员还在观望,本文给大家一个建议.这仅代表我的个人意见, 我有充分的理由推荐.net 程序 ...

  8. ASP.NET Core之跨平台的实时性能监控(2.健康检查)

    前言 上篇我们讲了<如何使用App Metrics 做一个简单的APM监控>,最后提到过健康检查这个东西. 这篇主要就是讲解健康检查的内容. 没看过上篇的,请移步:ASP.NET Core ...

  9. asp.net core系列 67 Web压力测试工具WCAT

    asp.net core系列 67 Web压力测试工具WCAT 原文:asp.net core系列 67 Web压力测试工具WCAT 一.介绍 最近搭建了一套CQRS框架,需要在投入开发前,进行必要的 ...

最新文章

  1. Application provided invalid, non monotonically increasing dts to muxer in stream 0: -92233720368547
  2. python 决策树 字符型_Python判断字符串是否xx开始或结尾的示例
  3. linux编译内核的步骤
  4. javabean反射改字段内容_JSP第三篇「JavaBean的介绍、JSP的行为--JavaBean」(修订版)...
  5. mysql数据库下的所有表字段
  6. 蓝牙设置种常用的Intent
  7. libiconv android,iconv库 android ndk可运行
  8. Unity快速入门教程-手机游戏开发前的准备(手机模拟器Simulator)
  9. 2019-01-19-build-xmr-stak-on-ubuntu
  10. android 控制手机,如何用Android手机控制另一部手机[详细说明]
  11. 『论文笔记』Visually Grounded Reasoning across Languages and Cultures
  12. 【猿说理财】《一》理财需要理由吗
  13. 爬取沪江网考研词汇并按要求存为txt
  14. 腾讯起点学院:用户增长训练营
  15. 课程设计:学生档案管理系统
  16. 瑞芯微RV1126/1109开发流程之驱动升级
  17. CH34X linux驱动安装,参考代码例程
  18. My SQL简介与安装教程_001
  19. NLP14-基于Gensim中的Doc2Vec的试探
  20. php伪协议c,文件包含之:php伪协议

热门文章

  1. ITSS的服务项目经理和服务工程师是否有意义呢?
  2. Navicat的1577 – Cannot proceed because system tables used by Event Scheduler where found damaged at s
  3. 给div加边框和颜色
  4. html js使用svg图标,Vue项目中使用svg图标
  5. 做自媒体要会用的剪辑工具分享
  6. 网络游戏需要多大的带宽,延迟又是怎么回事
  7. 计算机音乐谱牵丝戏,牵丝戏(简单抒情版)
  8. 校验Ipv4 ipv6的格式 python
  9. 使用jPlayer实现带广告功能和试听试看功能的MP4/MP3播放
  10. 一分钟说清:5G网络优化工程师各级别要求