Node.js+Web TWAIN,实现Web文档扫描和图像上传
通过Dynamic Web TWAIN SDK和Node.js的组合,只需要几行代码就可以实现在浏览器中控制扫描仪,获取图像后上传到远程服务器。
原文:Document
Imaging and Uploading With Dynamic Web TWAIN and Node.js
下载安装
通过Node.js创建server
创建工程目录,打开cmd.exe进入到工程目录,安装下面两个Node.js模块:
1
2
|
npm install formidable@latest npm install express |
创建server.js,初始化:
1
2
3
4
5
|
var formidable = require( 'formidable' ); var util = require( 'util' ); var express = require( 'express' ); var fs = require( 'fs' ); var app = express(); |
把静态资源,比如图片,css等,都加载进来:
1
|
app.use(express. static (__dirname, '/public' )); |
要实现跨域访问,需要在header里添加权限,如果不添加,只能local访问:
1
2
3
4
5
6
7
|
app.use( function (req, res, next) { res.header( "Access-Control-Allow-Origin" , "*" ); res.header( "Access-Control-Allow-Methods" , "PUT, POST, GET, DELETE, OPTIONS" ); res.header( "Access-Control-Allow-Headers" , "X-Requested-With, content-type" ); res.header( "Access-Control-Allow-Credentials" , true ); next(); }); |
在POST请求中通过formidable解析数据:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
app.post( '/upload' , function (req, res) { var form = new formidable.IncomingForm(); form.parse(req, function (err, fields, files) { // console.log(util.inspect({ // fields: fields, // files: files // })); fs.readFile(files.RemoteFile.path, function (err, data) { // save file from temp dir to new dir var newPath = __dirname + "/uploads/" + files.RemoteFile.name; fs.writeFile(newPath, data, function (err) { if (err) throw err; console.log( 'file saved' ); res.end(); }); }); }); }) |
设置好IP和端口:
1
2
3
4
5
|
var server = app.listen(2014, function () { var host = server.address().address; var port = server.address().port; console.log( 'listening at http://%s:%s' , host, port); }) |
通过Dynamic Web TWAIN创建client
创建一个网页,包含一个div和两个button:
1
2
3
4
5
6
7
8
9
10
11
12
|
< html > < head > < title >Document Imaging & Uploading</ title > < script src = "/Resources/dynamsoft.webtwain.initiate.js" ></ script > < script src = "/Resources/dynamsoft.webtwain.config.js" ></ script > </ head > < body > < div id = "dwtcontrolContainer" ></ div > < input type = "button" value = "Acquire" onclick = "AcquireImage();" /> < input id = "btnUpload" type = "button" value = "Upload Image" onclick = "btnUpload_onclick()" > </ body > </ html > |
这里需要把Web TWAIN SDK安装目录下的Resources目录拷贝过来。
加几行代码就可以扫描了:
1
2
3
4
5
6
|
function AcquireImage(){ DWObject.IfShowUI = false ; DWObject.SelectSource(); DWObject.OpenSource(); DWObject.AcquireImage(); } |
到这里可以先测试下扫描能否正常工作。接下来实现远程上传:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
function btnUpload_onclick() { DWObject.HTTPPort = 2014; var CurrentPathName = unescape(location.pathname); // get current PathName in plain ASCII var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf( "/" ) + 1); var strActionPage = CurrentPath + "upload" ; var strHostIP = "localhost" ; // modify the IP for cross-domain access var sFun = function (){ alert( 'successful' ); }, fFun = function (){ alert( 'failed' ); }; DWObject.HTTPUploadThroughPostEx( strHostIP, DWObject.CurrentImageIndexInBuffer, strActionPage, "test.jpg" , 1, // JPEG sFun, fFun ); } |
测试下。命令行启动server:
1
|
node server.js |
打开http://localhost:2014就可以玩了。
源码
https://github.com/DynamsoftRD/nodejs-dwt
1
|
git clone https://github.com/DynamsoftRD/nodejs-dwt.git |
Node.js+Web TWAIN,实现Web文档扫描和图像上传的更多相关文章
- Node.js 从零开发 web server博客项目[安全]
web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...
- ASP.NET Core 中文文档 第二章 指南 (09) 使用 Swagger 生成 ASP.NET Web API 在线帮助测试文档
原文:ASP.NET Web API Help Pages using Swagger 作者:Shayne Boyer 翻译:谢炀(kiler) 翻译:许登洋(Seay) 对于开发人员来说,构建一个消 ...
- WEB前端开发规范文档(转)
http://codeguide.bootcss.com/ 编写灵活.稳定.高质量的 HTML 和 CSS 代码的规范上面的文档 再结合下面的规范: 无论是从技术角度还是开发视角,对于web前端开发 ...
- 网站开发进阶(三十八)Web前端开发规范文档你需要知道的事
Web前端开发规范文档你需要知道的事 规范目的 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进 ...
- node.js之十大Web框架
之前接触过Node.js是因为好奇大前端越来越能干了,连我后台的饭碗都要抢了,太嚣张了,于是我想打压打压它,然后就这样接触它了.再到后来是因为Settings-Sync插件二次开发,我需要用node. ...
- Web前端开发规范文档你需要知道的事
Web前端开发规范文档你需要知道的事 规范目的 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进 ...
- WEB前端开发规范文档[转]
为新项目写的一份规范文档, 分享给大家. 我想前端开发过程中, 无论是团队开发, 还是单兵做站, 有一份开发文档做规范, 对开发工作都是很有益的. 本文档由本人编写, 部分意见来源于网络, 以此感谢, ...
- Fenix – 基于 Node.js 的桌面静态 Web 服务器
Fenix 是一个提供给开发人员使用的简单的桌面静态 Web 服务器,基于 Node.js 开发.您可以同时在上面运行任意数量的项目,特别适合前端开发人员使用. 您可以通过免费的 Node.js 控制 ...
- 关于ASP.NET Web Api的HelpPage文档注释问题
关于ASP.NET Web Api的HelpPage文档注释问题 以前我用微软的HelpPage来自动生成的webAPI帮助文档.在使用了一段时间后发现只能显示Controller上面写的注释文档内容 ...
随机推荐
- powerDesigner 一些设置
常用设置 table中需要显示的内容 --------------------------------------------------------------------------------- ...
- Python3基础教程(二十)—— flask介绍
基本概念 什么是Flask? Flask 是一个 web 框架.也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序.这个 web 应用程序可以是一些 web 页面.博客.w ...
- uva1442 Cav
连通器向左向右扫描两次即可每一段有水的连通区域,高度必须相同,且不超过最低天花板高度if(p[i] > level) level = p[i]; 被隔断,要上升(隔断后,之前的就不变了,之后的从 ...
- ES6(vue)对象词法扩展
ES6 允许声明在对象字面量时使用简写语法,来初始化属性变量和函数的定义方法,并且允许在对象属性中进行计算操作: function getCar(make, model, value) { retur ...
- JSP常用的几种跳转方式
一, 使用href超链接标记 (客户端跳转) 二, 提交表单 (客户端跳转) <form name="fo ...
- EBS ORACLE工单齐套率的计算程序
PROCEDURE Get_wip_accept_item_date(p_use_id in number, p_org_id IN NUMBER, p_start_date IN DATE, p_e ...
- Java 对象的创建以及类加载
1. 对象的创建的过程: 类加载检查—>分配内存—>初始化零值—>设置对象头—>执行 init . 1.类加载检查: 虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数 ...
- 7. 配置undo表空间
7. 配置undo表空间 undo日志可以存储在一个或多个undo表空间中,无需存储在系统表空间中. 要为MySQL实例配置单独的undo表空间,请执行以下步骤 [重要]: 只能在初始化新MySQL实 ...
- cenos6.5作为网关
入口服务器(网关服务器)关闭selinuxsetenforce 0vim /etc/selinux/config将SELINUX=enforcing改为SELINUX=disabled 修改防火墙ip ...
- Angular 1.x 框架原理
指令生命周期 compile阶段 对dom进行编译,首先(如果有的话)对template进行应用(这个过程只执行一次).然后把当前指令(内部的指令还没被渲染)传递给iElement,接着执行compi ...