目录(?)[+]

通过Dynamic Web TWAIN SDKNode.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

最新文章

  1. Mac Pro 编译安装 Redis 的 PHP 客户端 phpredis
  2. Oracle EBS - Form DEV Env
  3. [译]:Orchard入门——使用标签管理内容
  4. Spring操作指南-IoC基础环境配置(基于XML)
  5. 关于equals、hashcode和集合类的小结
  6. 【C#进阶系列】16 数组
  7. 11.9Daily Scrum
  8. 转载 DevOps的基本原则与介绍
  9. IOS Dictionary和Model相互转换
  10. java/php/c#版rsa签名以及验签实现
  11. IIS 部署ASP.Net, WebAPI, Restful API, PUT/DELETE 报405错解决办法, webapi method not allowed 405
  12. Windows 10 2016 LTS版本下载与激活
  13. Java多线程:向线程传递参数的三种方法
  14. ORA-27104: system-defined limits for shared memory was misconfigured与Linux内核参数配置有关的案例
  15. Docker概念(二)
  16. spring-batch批处理框架
  17. Zookeeper 通知更新可靠吗? 解读源码找答案!
  18. LINUX 内核 API
  19. js触摸事件
  20. Linux操作_磁盘管理_增加虚拟磁盘

热门文章

  1. leetcode_935. Knight Dialer_动态规划_矩阵快速幂
  2. log4j.xml 精选的log4j.xml文档,比较详细,网上的版本很多,这个版本相对而言比较完整
  3. 第1节 flume:10、flume的更多组件介绍
  4. Spring框架针对dao层的jdbcTemplate操作crud之update修改数据库操作
  5. 普通平衡树(treap)
  6. jdk环境变量配置至第一个简单程序运行成功
  7. 2. CHARACTER_SETS
  8. Highlights in a Journal
  9. LeetCode(59)Length of Last Word
  10. 算法导论 第一章and第二章(python)