node.js 和 HTML5-Canvas 结合实现截图上传交互

楼主要做一个简单的图片上传服务器, node.js实现服务端, 页面使用HTML5-Canvas实现截图。

为什么用Nodejs呢,因为用Js写后台很爽-。- 而且比较简单

为什么用canvas呢,其实我不想用的 因为有些低版本的IE对HTML5的支持不好,

楼主本来想用 HTML2CANVAS 来实现截图并且上传到一个服务器上。 (html2canvas 技术可以参照我另一篇博客 【戳这里】)

但是这个技术对于一些复杂的DOM就不适用了,比如EXTJS drawComponent画出来的东西完全是渣啊~~所以退而求其次,我把呈现测试用

HTML5的Canvas呈现出来,然后保存图片。

  ╮(╯▽╰)╭ 具体用处是公司的秘密

 

 

 

推荐一个教程,写的很简单明了: 

Node入门

下面的代码是我参照了这个教程的结构写的,如有雷同说明那货一定也是看了这个教程。

 

主页代码: Index.js

1 var server = require("./server");
2 var route  = require("./route");
3 server.start(route.route);

 

 server代码:

var http = require("http");
var url = require("url");function start(route, handle) {function onRequest(request, response) {var postData = "";var pathname = url.parse(request.url).pathname;console.log("Request for " + pathname + " received.");request.setEncoding("utf8");request.addListener("data", function(postDataChunk) {postData += postDataChunk;console.log("Received POST data chunk '"+postDataChunk + "'.");});request.addListener("end", function() {route(pathname, response, postData);});}http.createServer(onRequest).listen(8888);console.log("Server has started.");
}exports.start = start;

 

route.js 代码:

 1 function route(pathname,response,postData){
 2     var requestHandler=require("./requestHandler");
 3     if (typeof requestHandler.handle[pathname] === 'function') {
 4          
 5              requestHandler.handle[pathname](response,postData);
 6          response.end();
 7      } 
 8     else {
 9         console.log("No request handler found for " +pathname);
10      response.writeHead(404, {"Content-Type": "text/plain"});
11         response.write("404 Not found");
12          
13       }
14 }
15 exports.route=route;

 

requestHandler.js 代码:

 1 function start(response,postData) {
 2   console.log("Request handler 'start' was called.");
 3     
 4     response.writeHead(200, {"Content-Type": "text/html"});
 5     var body = '<html>'+
 6     '<head>'+
 7     '<meta http-equiv="Content-Type" content="text/html; '+
 8     'charset=UTF-8" />'+
 9     '</head>'+
10     '<body>'+
11     '<canvas id="mycanvas" width=500 height=500 border=3 solid=#9C9898></canvas>'+'<script src="http://common.cnblogs.com/script/jquery.js" type="text/javascript"></script>'+'</body>'
12     +'<script type="text/javascript">window.onload = function(){var canvas=document.getElementById("mycanvas");var context = canvas.getContext("2d");context.beginPath();context.moveTo(100, 150);context.lineTo(450, 50);context.lineWidth = 10;context.strokeStyle ="#ff0000";context.stroke();$.ajax({url: "/upload",data:canvas.toDataURL("image/png"),type: "post",success: function( result ) {console.log( result );}});};</script>'+
13     
14     '</html>';
15        response.write(body);
16     response.end();
17 }
18 
19 function upload(response,postData) {
20     response.writeHead(200, {"Content-Type": "text/plain"});
21     var fs = require('fs');
22     var base64Data = postData.replace(/^data:image\/\w+;base64,/, "");
23     var dataBuffer = new Buffer(base64Data, 'base64');
24       console.log("Request handler 'upload' was called.");
25     fs.writeFile("out.png", dataBuffer, function(err) {
26         });
27      response.write("hello");
28     response.end();
29 }
30 var handle=[];
31 handle['/start']=start;
32 handle['/upload']=upload;
33 handle['/']=start;
34 exports.handle=handle;

 

 

其中,处理base64的图片数据用到了这个链接的技术: 处理base64数据

 程序运行结果 :

浏览器:

服务器目录:

 

转载于:https://www.cnblogs.com/xdxer/archive/2013/01/18/nodejs_canvas_upload.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Altium Designer原理图库引脚名字添加上划线

双击引脚在输入名字的时候每一个字母后面加上反斜杠 \ 就可以了。 Exp: R\S\T\

得到classpath和当前类的绝对路径的一些方法

From&#xff1a; http://my.oschina.net/u/1583086/blog/521259 下面是一些得到classpath和当前类的绝对路径的一些方法。 1.this.getClass().getResource&#xff08;""&#xff09; 得到的是当前类class文件的URI目录。如&#xff1a;file&#xff1a;/D&#…

通过文件url地址获取base64;通过图片url地址获取base64;js获取文件的base64

本篇是通过url地址获取文件的base64 如果想要通过File文件获取base64查看这篇 以下代码可直接复制使用&#xff01;注意第9行的图片地址更改下 <template><div class"content"><div>获取图片的base64</div><input type"file" …

使用CrpytAPI编码和解码PKCS#7消息

为了在不同体系结构的网络和计算机之间交互加密消息&#xff0c;加密通信各方需要对传送的消息使用标准的方式进行编码。CryptAPI支持PKCS #7标准加密消息语法格式消息。PKCS #7标准采用了CCITT X.208定义的ASN.1 BER编码规则&#xff0c;定义了加密消息相关的类型和编码方式。…

J2EE开发之常用开源框架介绍

From: http://blog.csdn.net/kuyuyingzi/article/details/38351231 主要就我所了解的J2EE开发的框架或开源项目做个介绍&#xff0c;可以根据需求选用适当的开源组件进行开发。主要还是以Spring为核心&#xff0c;也总结了一些以前web开发常用的开源工具和开源类库 1持久层&am…

modprobe: FATAL: Module xxx.ko not found in directory /lib/modules/$(uname -r)

如果遇到此错误&#xff0c;首先要检查要加载的驱动是否已经存在与系统默认驱动路径 /lib/modules/$(uname -r) 下面&#xff0c;确认拷贝完成后&#xff0c;需要在加载模块之前建立该模块的依赖关系。也即必须用 depmod 来更新一下 /lib/modules/$(uname -r)/modules.dep 文件…

Android 短信解析

URI主要有&#xff1a; content://sms/ 所有短信 content://sms/inbox 收件箱 content://sms/sent 已发送 content://sms/draft 草稿 content://sms/outbox 发件箱 content://sms/failed 发送失败 content://sms/queued 待…

ASP.Net网站部署失败

部署站点时候&#xff0c;出现如下错误 “/”应用程序中的服务器错误。 --------------------------------------------------------------------------------当前标识(NT AUTHORITY\SYSTEM)没有对“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files”的…

Linux系统开机自动加载驱动module

Linux系统的驱动默认存放目录为&#xff1a; /lib/modules/$(uname -r)/kernel/drivers&#xff0c;因此如果希望系统可以启动时自动加载驱动必须首先把驱动放到该目录下面&#xff0c;执行完此步操作以后&#xff0c;再执行 depmod 命令更新驱动依赖关系文件 modules.dep&…

FineReport报表和J2EE应用的集成

From: http://www.blogjava.net/fannie/archive/2013/05/08/398985.html FineReport是一个纯Java软件&#xff0c;因此对于J2EE的项目&#xff0c;可以做到无缝集成。 报表服务器并非物理概念的服务器&#xff0c;而是以一个标准的J2EE应用的形式或者jar包的形式提交给程序。应…

vue使用jszip和file-save下载文件并打包;vue前端下载多个文件b并打包;

场景&#xff1a; 一般是后端直接将多个文件打包好&#xff0c;前端调用下载地址下载打包&#xff1b;但是文件太多会导致下载接口时间过长和服务器爆掉&#xff1b;故采用前端先将多个文件下载然后进行打包&#xff1b; 注意点&#xff1a; 1.先获取所有下载的文件路径和包含后…

【BZOJ1085】骑士精神

迭代加深搜索。 剪枝&#xff1a;当满足以下任意一个条件退出&#xff1a; 1.当前已搜到答案时&#xff08;ans!-1||sum0&#xff09; 2.剩余步数1<当前局面与目标局面不同的格子数sum 时&#xff08;因为n步最多改变n1个格子&#xff09; 3.当前步数>当前规定最大步数时…

CH340电路设计注意事项

在前面两篇博客提到了CH340的电路设计以及芯片选型&#xff0c;本文将重点放在使用CH340芯片进行电路设计的一些细节与注意事项。 电压匹配问题 CH340 芯片通过 USB 转换出来的 TTL 串口输出和输入电压是根据芯片供电电压是自适应的。也即&#xff0c;如果芯片是 5V 供电&…

解决 Visual Studio 中代码注释自动折叠的问题

今天突发奇想&#xff0c;打算把存储过程以注释的形式放在代码中进行版本管理&#xff0c;比如下面的代码&#xff1a; 由于存储过程很长&#xff0c;注释占了很多行&#xff0c;严复影响了正常代码的排版与阅读体验。之前也遇到过这样的场景&#xff0c;当时通过手动添加regio…

Newtonsoft.Json高级用法

From: http://www.cnblogs.com/yanweidie/p/4605212.html 手机端应用讲究速度快&#xff0c;体验好。刚好手头上的一个项目服务端接口有性能问题&#xff0c;需要进行优化。在接口多次修改中&#xff0c;实体添加了很多字段用于中间计算或者存储&#xff0c;然后最终用Newtonso…

CH340驱动(含各平台)

CH340转串口芯片支持的平台驱动齐全&#xff0c;支持 Windows/Linux/Android/MacOS/WinCE 等各主流系统。下面就给出各平台下驱动官网链接和简要说明&#xff0c;每个平台的安装与使用问题可以参见我的其他博文。 Windows驱动 下载链接&#xff1a;CH340/CH341 Windows 驱动链…

js获取文件名后缀

this.fileType this.file.name.split(.)[this.file.name.split(.).length - 1]

PHP笔记-管道的作用 类

echo 123 | sudo -S /bin/bash -c cp god* /usr/local/bin | 就是管道 作用是将前面的结果作为后面的参数使用 123就是sudo的密码 -c &#xff08;command命令&#xff09; cp god* /usr/local/bin将以god开头的文件拷贝到/usr/local/bin文件中 god* 以god开头的文件 /bin/b…

Android 经典示例,初学者的绝好源码资料

2019独角兽企业重金招聘Python工程师标准>>> Android 经典示例&#xff0c;初学者的绝好源码资料 附上源码&#xff1a; 转载:http://www.adobex.com/android/source/details/00000374.htm 转载于:https://my.oschina.net/androidcode/blog/104696

USB转串口驱动(支持各平台)

CH340转串口芯片支持的平台驱动齐全&#xff0c;支持 Windows/Linux/Android/MacOS/WinCE 等各主流系统。下面就给出各平台下驱动官网链接和简要说明&#xff0c;每个平台的安装与使用问题可以参见我的其他博文。 Windows驱动 下载链接&#xff1a;CH340/CH341 Windows 驱动链…