- 浏览: 68865 次
- 性别:
- 来自: 南京
文章分类
最新评论
先上效果图:
这是我当时做多图片的代码,拿出来给大家借鉴一下(有些地方需要亲们自己改一下,大方向是对的)
<!--more-->总共涉及到三处文件(常规来说)
1.路由入口文件(我这里是/routes.js,很多时候会在/app.js)
//添加美食
app.all('/add', users.add);
2.路由控制器文件(我这里是/routes/users.js)
//添加美食
exports.add = function (req, res) {
if (req.method == "GET") {
var user = {};
if(req.session.user){
user = req.session.user;
}
res.render("users/food_add", {title:'发布美食-'+config.name,name:config.name,user:user});
} else if (req.method == "POST") {
//获取数据
var x = req.body.x;
var y = req.body.y;
var cat_id = req.body.cat_id;
var cat_name = req.body.cat_name;
var address = req.body.address;
var title = req.body.title;
var desc = req.body.desc;
var content = req.body.content;
var pics = '';
var price = req.body.price;
var tags = req.body.tags;
var add_time = Date.parse(new Date())/1000;
var support = 0;
var uid = req.body.uid;
//处理图片上传
//console.dir(req.files);
var file_obj = req.files.pics;
//console.log(file_obj.length);
var file_obj2 = [];
for(var i=0;i<file_obj.length;i++){
if(file_obj[i].name){
file_obj2.push(file_obj[i]);
}
}
var length = file_obj2.length;
if(length>0){
file_obj2.forEach(function(item,index){
if(item.path){
var tmpPath = item.path;
var type = item.type;
var extension_name = "";
//移动到指定的目录,一般放到public的images文件下面
//在移动的时候确定路径已经存在,否则会报错
var tmp_name = (Date.parse(new Date())/1000);
tmp_name = tmp_name+''+(Math.round(Math.random()*9999));
//判断文件类型
switch (type) {
case 'image/pjpeg':extension_name = 'jpg';
break;
case 'image/jpeg':extension_name = 'jpg';
break;
case 'image/gif':extension_name = 'gif';
break;
case 'image/png':extension_name = 'png';
break;
case 'image/x-png':extension_name = 'png';
break;
case 'image/bmp':extension_name = 'bmp';
break;
}
var tmp_name = tmp_name+'.'+extension_name;
var targetPath = 'public/images/' + tmp_name;
console.log(tmpPath);
//将上传的临时文件移动到指定的目录下
fs.rename(tmpPath, targetPath , function(err) {
if(err){
throw err;
}
if(pics){
pics += ','+tmp_name;
}else{
pics += tmp_name;
}
//判断是否完成
//console.log(index);
//删除临时文件
fs.unlink(tmpPath, function(){
if(err) {
throw err;
}else{
if((index+1)==length){
console.log(targetPath);
//上传处理完成
//数据
var data = {
x:x,//经度
y:y,//维度
cat_id:cat_id,//分类id
cat_name:cat_name,//分类名称
address:address,//地址
title:title,//标题
desc:desc,//简介
content:content,//内容
pics:pics,//图片字段,以','隔开多张图片
price:price,//价格
tags:tags,//标签 以','隔开多个
add_time:add_time,//支持度
support:support,//支持度 默认为0
uid:uid//用户id 可匿名
};
food_preDao.insert(data, function (err, food) {
if(err){
res.json({err:100,content:'数据库错误'});
}else{
res.json({err:0,content:'发布成功!',data:food});
}
});
}
}
});
});
}
});
}else{
//没有图片
//数据
var data = {
x:x,//经度
y:y,//维度
cat_id:cat_id,//分类id
cat_name:cat_name,//分类名称
address:address,//地址
title:title,//标题
desc:desc,//简介
content:content,//内容
pics:pics,//图片字段,以','隔开多张图片
price:price,//价格
tags:tags,//标签 以','隔开多个
add_time:add_time,//支持度
support:support,//支持度 默认为0
uid:uid//用户id 可匿名
};
food_preDao.insert(data, function (err, food) {
if(err){
res.json({err:100,content:'数据库错误'});
}else{
res.json({err:0,content:'发布成功!',data:food});
}
});
}
}
};
3.视图文件(我这里是/views/users/food_add.ejs)
<style>
.upload_item{ width: 50px; height: 45px; overflow: hidden;border: 2px dashed #bfbfbf; float: left;margin-right: 10px;}
.upload_item_add{ width: 50px; height: 45px; display: block; line-height: 42px; text-align: center; font-size: 30px; cursor: pointer;}
.upload_input{ }
</style>
<script>
var ADD = {
upload_click:function(obj){
$(obj).parent().children().eq(1).click();
},
upload_change:function(obj){
var path;
path=$(obj).val(); //C:\Documents and Settings\hud\桌面\AddFile.jpg
var aa;
aa=path.split('.');
//alert(aa[aa.length-1]); //jpg 结果
var name;
name=path.split('\\');
var bb=name[name.length-1];
//alert(bb.substr(0,bb.indexOf('.'))); //AddFile 结果
$(obj).parent().children().eq(0).css('fontSize','12px');
$(obj).parent().css('borderStyle','solid');
$(obj).parent().children().eq(0).html(bb.substr(0,bb.indexOf('.')));
if($(obj).parent().attr('index')==1){//新增
var html = '<div class="upload_item" index="1"><span class="upload_item_add" onclick="ADD.upload_click(this)">+</span><input type="file" name="pics" id="pics" class="upload_input" onchange="ADD.upload_change(this)" /></div>';
$('#upload_box').append(html);
$(obj).parent().attr('index','0');
}
}
};
</script>
<form method="post" action="/add" enctype="multipart/form-data">
<table>
<tr>
<td>经度:</td><td><input type="text" name="x" id="x" /></td>
</tr>
<tr>
<td>维度:</td><td><input type="text" name="y" id="y" /></td>
</tr>
<tr>
<td>分类:</td><td><select name="cat_id"><option value="1">分类1</option></select></td>
</tr>
<tr>
<td>地址:</td><td><input type="text" name="address" id="address" /></td>
</tr>
<tr>
<td>标题:</td><td><input type="text" name="title" id="title" /></td>
</tr>
<tr>
<td>简介:</td><td><input type="text" name="desc" id="desc" /></td>
</tr>
<tr>
<td>内容:</td><td><input type="text" name="content" id="content" /></td>
</tr>
<tr>
<td>图片:</td><td id="upload_box"><div class="upload_item" index="0" style="display:none;"><span class="upload_item_add" onclick="ADD.upload_click(this)">+</span><input type="file" name="pics" id="pics" class="upload_input" onchange="ADD.upload_change(this)" /></div><div class="upload_item" index="1"><span class="upload_item_add" onclick="ADD.upload_click(this)">+</span><input type="file" name="pics" id="pics" class="upload_input" onchange="ADD.upload_change(this)" /></div></td>
</tr>
<tr>
<td>价格:</td><td><input type="text" name="price" id="price" /></td>
</tr>
<tr>
<td>标签:</td><td><input type="text" name="tags" id="tags" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交" /></td>
</tr>
</table>
</form>
转载自:http://www.9958.pw/post/nodejs_upload_images
发表评论
-
项目管理之如何控制项目进度和质量
2016-07-16 22:37 606控制项目进度和质量首先在整体上要有一个合理清晰的流程,并且在整 ... -
15 个非常棒的 CSS3 效果教程
2016-07-03 20:42 5881. 创建一个漂亮的图标 这个教程将教你如何用纯 C ... -
前20名的不安全密码(需要避免)
2016-07-01 21:41 514下图举例说明了一些人们作出选择密码时最常用的错误,以及如何使你 ... -
js实现图片放大缩小后进行的复杂排序
2016-06-30 21:57 584首先,我们来讲下需求: 1.图片分为大小和小图,大图占四个小 ... -
史上最全ajax(原生JS,javascript版,非jquery)详细注释!
2016-06-29 22:31 810史上最全ajax详细注释!(原生JS,javascript版, ... -
php千万级pv架构经验分享
2016-06-28 22:04 1294转载自:http://www.9958.pw/post/ph ... -
ecshop 时间问题请注意 /data/config.php
2016-06-27 22:43 866ecshop 处理时间,绕来绕去, 后台的时区设置, 并非以 ... -
目前比较流行的二维码的生成
2016-06-26 23:55 584最近比较流行二维码,自己百度了一下发现有一个很不错的实现方法使 ... -
如何阻止移动设备(手机,pad)浏览器双击放大网页?
2016-06-24 22:29 1214现在的手机或平板电脑等移动设备上的浏览器默认都有双击放大的设置 ... -
PHP解决Xss跨域攻击以及sql注入等危险字符串方案类库
2016-06-19 21:45 778由于该模块在项目中的要求是 不能提示任何信息,也不作断点操作, ... -
网站敏感骂人词库及算法(附6仟个敏感词)
2016-06-16 22:07 5886原文:「我今天开着张三丰田去上班 」 strtr:「我今天开 ... -
jQuery制作元素在屏幕中水平垂直居中效果
2016-06-14 21:56 599jQuery.fn.center = function () ... -
纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等)
2016-06-11 21:32 9761、正方形 CSS代码如下: #square { widt ... -
分享一个JQuery写的点击上下滚动的小例子
2016-06-08 22:00 502效果图 演示地址 源码下载 <!--more--> ... -
精美的国外扁平化网页设计作品
2016-06-05 16:02 598Who Wanna <!--more--> ... -
提交您的博客到各大网站
2016-06-03 21:04 382各大搜索引擎网站登录入口: Google收录入口:http:/ ... -
推荐7个 CSS3 制作的创意下拉菜单效果
2016-06-02 22:15 4031. 使用 jQuery 和 CSS3 制作向下滑动的导航菜单 ... -
Dev Http Client(Chrome的HTTP插件)
2016-05-31 22:34 756Dev Http Client(Chrome的HTTP插件) ... -
好的用户界面-界面设计的一些技巧
2016-05-29 16:24 4021 尽量使用单列而不是 ... -
项目组制定的一份页面优化指南
2016-05-27 21:40 3651.文档声明 文档声明必须置于网页的HTML部分的最开始,标签 ...
相关推荐
该代码实现了node.js 配置服务器,网页上传压缩图片、显示base64 上传接受base64图片格式,该代码来源于博客:https://blog.csdn.net/zhangpengzp/article/details/86629097
在本文中,我们将深入探讨如何使用Node.js和MySQL来实现一个用户信息管理系统,该系统能够处理用户注册(包括图片上传)、用户登录以及查看所有用户信息的功能。Node.js是一款基于Chrome V8引擎的JavaScript运行环境...
在本文中,我们将深入探讨如何使用Node.js实现图片的上传和展示功能,这对于初学者来说是一个很好的实践项目。Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它以其非阻塞I/O和事件驱动的特性,使其在构建...
JavaScript在Node.js中被用于编写服务器端代码,借助V8引擎的强大性能,能实现高效的网络应用开发。 ### 2. 安装与配置Node.js和NPM 安装Node.js通常可以通过官网下载安装包,然后按照提示进行安装。NPM(Node ...
在本文中,我们将深入探讨如何使用Node.js、Express框架和MySQL数据库来构建一个功能完备的Web应用程序,包括数据的增删改查(CRUD)操作、分页功能以及图片的上传处理。首先,我们先来了解这三个核心组件。 **Node...
Node.js 无需微信认证即可实现微信公众号自动群发图文消息
在本文中,我们将深入探讨如何使用Node.js、Express、MongoDB和Multer库来构建一个功能完善的文件上传、存储和分页管理系统。首先,我们来看看每个技术的核心概念: 1. **Node.js**:Node.js是一个开放源代码、跨...
1. **Node.js**: Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它使得开发者可以在服务器端使用 JavaScript 编程,从而实现了JavaScript的全栈开发能力。Node.js 具有非阻塞I/O模型和高效的事件驱动,...
8. **修改头像**:这个功能可能涉及上传文件,需要使用multer等中间件处理文件上传,服务器接收到图片后,可以将其保存到特定目录,并更新用户信息。 以上就是使用Node.js、Ajax和HTML构建登录注册界面及相关功能的...
通过这个实战项目,学习者不仅能掌握Vue2.x和Node.js的基本用法,还能了解到完整的电商项目开发流程,包括前后端交互、数据库设计、用户认证、数据安全等多个方面,对提升综合开发能力大有裨益。
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程。Node.js 使用了一个事件驱动、非阻塞 I/O 模型,使其轻量又高效,非常适合构建数据密集型的实时应用...
Node.js图片上传简单实现的知识点包括以下几个方面: 1. Node.js环境的搭建: - Node.js是一种基于Chrome V8引擎的JavaScript运行环境,用于服务器端编程。 - 它可以利用JavaScript进行后端开发,并且不需要编译...
Node.js 是一个基于Chrome V8引擎的JavaScript运行环境,由于其非阻塞I/O模型和事件驱动的特性,使得它非常适合用于构建高效、可扩展的网络应用,如文件上传服务。 首先,要实现文件上传,通常会使用一些流行的Node...
Node.js以其非阻塞I/O模型和JavaScript的易用性,使得处理文件上传变得高效且灵活。本篇文章将深入探讨Node.js中实现文件上传的方法、相关库以及最佳实践。 首先,Node.js本身并不直接支持文件上传功能,但可以通过...
在本文中,我们将深入探讨如何使用Node.js实现一个图片上传功能。Node.js作为一个基于Chrome V8引擎的JavaScript运行环境,因其非阻塞I/O模型和事件驱动的特点,使其成为构建高性能网络应用的理想选择,包括处理文件...
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它通过提供异步、非阻塞I/O模型来提高效率,使得服务器能够处理更多的并发连接,这对于网络应用来说非常关键。Node.js的模块化结构也使得代码可读性更强,易于...
ueditor是一款广泛使用的JavaScript富文本编辑器,而ueditor-node.js则是其在Node.js环境中的实现,它允许开发者在服务器端处理与编辑器相关的业务逻辑,如数据存储、格式转换等。本篇文章将深入探讨ueditor-node.js...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程,极大地拓宽了JavaScript的应用场景。在这个"Node.js-AppleiCloud服务的NodeAPI"项目中,我们看到的...