依赖库 connect,gm,imagemagick,image-size

connect:中间件

gm,imagemagick:用来处理图片如缩放、切割、添加文字水印等

image-szie:获取图片的宽高

图片上传处理服务,保存server.js

var http = require("http");
var connect = require("connect");
var url = require("url");
var fs = require("fs");

var imagesize = require("image-size");
var gm = require("gm");
var imageMagick = gm.subClass({imageMagick: true});

var oldImgName;
var app = connect().use(function(req, res, next){
var list = [];
var len = 0;
var pathName = url.parse(req.url).pathname;
pathName = pathName.substring(1, pathName.length);
oldImgName = req.headers.imgname;
req.on("error", function(err){
console.log(err);
});
req.on("data", function(chunk){
list.push(chunk);
len += chunk.length;
});
req.on("end", function(){
var buf = Buffer.concat(list, len);
req.data = {"path": pathName, "buf": buf};
next();
});
}).use(function(req, res, next){
if(req.data.path === "upload" && oldImgName){
fs.writeFileSync("./img/new_"+oldImgName, req.data.buf);

//取图片宽高
var imageInfo = imagesize("./img/new_"+oldImgName);
console.log(imageInfo.width, imageInfo.height);

//打印水印
var imgM = imageMagick("./img/new_"+oldImgName);
imgM.fill("blue");
imgM.fontSize(30);
imgM.drawText(100, 100, Date.now().toString());
imgM.write("./img/new_"+oldImgName, function(err){
if(err){
console.log(err);
}
});

//图片切割
var imgM2 = imageMagick("./img/new_"+oldImgName);
imgM2.crop(300, 300, 0, 0);//做切割
imgM2.write("./img/new_mid_"+oldImgName, function(err){
if(err){
console.log(err);
}
});

fs.writeFileSync("./img/new_min_"+oldImgName, req.data.buf);
var imgM_min = imageMagick("./img/new_min_"+oldImgName);
//imgM_min(“img.png”).crop(width, height, x, y)//做切割
//!=强制缩放
imgM_min.resize(200, 200, "!").autoOrient().write("./img/new_min_"+oldImgName, function(err){
if(err){
console.log(err);
}
});
}
next();
}).use(function(req, res){
res.writeHead(200, {"Content-Type": "text/plain; charset=UTF-8"});
res.write("ending");
res.end();
});

http.createServer(app).listen(7650);
console.log("start....." + 7650);

客户端请求保存代码test.js

var http = require("http");
var fs = require("fs");

var imgPath = "./12306.jpg";

var data = fs.readFileSync(imgPath);

var options = {
"hostname": "127.0.0.1",
"port":7650,
"path":"/upload",
"method":"post",
"headers":{
"Content-Type":"application/octet-stream",
"imgName":"12306.jpg"
}
};
var req = http.request(options, function(res){
res.on('data', function (chunk){
if(res.statusCode != 200){
console.log("reqest error");
}else{
console.log(chunk.toString());
}
});
});
req.write(data);
req.end();

node.js 上传图片的更多相关文章

  1. Node.js 上传图片并保存

    Node.js 上传图片并保存 依赖 package.json 文件 { "name": "demo", "version": " ...

  2. 上传图片到七牛云(服务端 node.js sdk)

    大体思路 前端要上传图片到七牛云,需要有一个token进行授权操作,而获取这个上传的upload token(以下简称upToken),在服务端需要一定的身份校验,比如说:只有登录的vip用户才能拿到 ...

  3. Node.js 项目搭建

    关于 本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识.本书绝不是一本“Hello World”的教程. 状态 你正在阅读的已经是本书的最终版. ...

  4. [读书笔记]了不起的node.js+实践(一)

    环境的变化带来了技术大跃进,机遇和挑战同时到来.基于我js也没有学,只好赶鸭子上架一起学了.(>﹏<) 1.先读读书 一开始就不知死活地看<深入浅出node.js>,弄得团团转 ...

  5. Node.js新手教程——怎样实现文件上传功能

    作者:zhanhailiang 日期:2014-11-16 本文将介绍怎样使用Node.js实现文件上传功能. 1. 初始化项目信息:npm init [root@~/wade/nodejs/node ...

  6. APNs功能之Node.js和Mysql应用总结

    APNs功能之Node.js和Mysql应用总结 这篇文档主要是总结Node.js和Mysql的学习心得体会.当然也可以看作是此前所写的消息推送服务的续篇. 简单描述下应用背景,我们的应用需要实现苹果 ...

  7. node.js系列笔记之node.js初识《一》

    node.js系列笔记之node.js初识<一> 一:环境说明 1.1 Linux系统CentOS 5.8 1.2 nodejs v0.10.15 1.3 nodejs源码下载地址 htt ...

  8. 初学node.js有感三

    WebStorm下的node.js 一.回顾与继续       在前面,我们知道了node.js的基本框架和思路,在这些原生环境下我们对node.js的设计思想有了比较深刻的认识,并且具有了编写大型程 ...

  9. 以太坊开发DApp实战教程——用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台(一)

    第一节 简介 欢迎和我们一起来用以太坊开发构建一个去中心化电商DApp!我们将用区块链.星际文件系统(IPFS).Node.js和MongoDB来构建电商平台类似淘宝的在线电商应用,卖家可以自由地出售 ...

随机推荐

  1. win7安装laravel

    使用Packagist 镜像 建立一个composer.json文件,内容如下: { "name": "laravel/laravel", "desc ...

  2. Hadoop “Name node is in safe mode” 错误解决方法

    Hadoop 解除 "Name node is in safe mode" 运行hadoop程序时,有时候会报以下错误:org.apache.hadoop.dfs.SafeMode ...

  3. AndroidStudio项目import进的包都是红色的

    今天在开发项目时,一不留神,项目中import部分的内容全部变成了灰色,最后的类名却都变成了红色,如图: 一时之间,懵逼了~~~.Alt+Enter快捷键导包竟然是这个样子的@_@:  这简直就没见过 ...

  4. Django of python 中文文档 及debug tool

    http://python.usyiyi.cn/django/index.html http://www.ziqiangxuetang.com/django/django-views-urls.htm ...

  5. 1.5 使用电脑测试MC20的发送英文短信功能

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  6. django事物回滚

    往数据库写入数据时,不经意间就会写入不完整的数据,我们称之为脏数据.事务管理(transaction)可以防止这种情况发生.事务管理一旦检测到写入异常,会执行回滚操作,即要么写入完整的数据,要么不写入 ...

  7. JAVA抠取Excel中的图片

    EXCEL中扔了一堆的图片,老大让对应到数据库中的数据上.思路先把图片抠出存成单个图片.然后上传到服务器,取下路径更新到数据库中. 注释掉的部分为有多个Excel时使用. package com.** ...

  8. Understanding When to use RabbitMQ or Apache Kafka

    https://content.pivotal.io/rabbitmq/understanding-when-to-use-rabbitmq-or-apache-kafka How do humans ...

  9. libsvm+eclipse(java)的配置以及开发需要设置的内容

    主要参考博客: 1.eclipse + libsvm-3.12 用SVM实现简单线性分类    cnBlog中的主要介绍如何导入jar包的问题. 2.LIBSVM入门解读   CSDN,主要是对LIB ...

  10. hdu1010感想

    杭电这道题是用dfs走迷宫问题,一直wa是因为没有将走过的地方标记,所以如果遇到走迷宫的问题一定要将走过的地方标记,如下: &&nx<n&&ny>=& ...