`
ldl_xz
  • 浏览: 68865 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

node.js实现多图片上传

 
阅读更多

先上效果图:

enter image description here

这是我当时做多图片的代码,拿出来给大家借鉴一下(有些地方需要亲们自己改一下,大方向是对的)

<!--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

分享到:
评论

相关推荐

    node.js 实现图片 压缩,上传下载,以及base64的图片显示、上传和服务端接受

    该代码实现了node.js 配置服务器,网页上传压缩图片、显示base64 上传接受base64图片格式,该代码来源于博客:https://blog.csdn.net/zhangpengzp/article/details/86629097

    node.js实现用户信息管理

    在本文中,我们将深入探讨如何使用Node.js和MySQL来实现一个用户信息管理系统,该系统能够处理用户注册(包括图片上传)、用户登录以及查看所有用户信息的功能。Node.js是一款基于Chrome V8引擎的JavaScript运行环境...

    Node.js实现上传/展示图片

    在本文中,我们将深入探讨如何使用Node.js实现图片的上传和展示功能,这对于初学者来说是一个很好的实践项目。Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它以其非阻塞I/O和事件驱动的特性,使其在构建...

    Node.js初级+进阶

    JavaScript在Node.js中被用于编写服务器端代码,借助V8引擎的强大性能,能实现高效的网络应用开发。 ### 2. 安装与配置Node.js和NPM 安装Node.js通常可以通过官网下载安装包,然后按照提示进行安装。NPM(Node ...

    node.js+express+mysql实现增删改查+分页+文件上传

    在本文中,我们将深入探讨如何使用Node.js、Express框架和MySQL数据库来构建一个功能完备的Web应用程序,包括数据的增删改查(CRUD)操作、分页功能以及图片的上传处理。首先,我们先来了解这三个核心组件。 **Node...

    Node.js-Node.js无需微信认证即可实现微信公众号自动群发图文消息

    Node.js 无需微信认证即可实现微信公众号自动群发图文消息

    Node.js-基于nodejsexpressmongodbmulter实现的文件上传存储分页管理功能

    在本文中,我们将深入探讨如何使用Node.js、Express、MongoDB和Multer库来构建一个功能完善的文件上传、存储和分页管理系统。首先,我们来看看每个技术的核心概念: 1. **Node.js**:Node.js是一个开放源代码、跨...

    Node.js-一个使用node将word转成html的小工具

    1. **Node.js**: Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它使得开发者可以在服务器端使用 JavaScript 编程,从而实现了JavaScript的全栈开发能力。Node.js 具有非阻塞I/O模型和高效的事件驱动,...

    node.js登录注册界面.zip

    8. **修改头像**:这个功能可能涉及上传文件,需要使用multer等中间件处理文件上传,服务器接收到图片后,可以将其保存到特定目录,并更新用户信息。 以上就是使用Node.js、Ajax和HTML构建登录注册界面及相关功能的...

    仿拼多多团购商城项目实战Vue2.x+Node.js(源码)

    通过这个实战项目,学习者不仅能掌握Vue2.x和Node.js的基本用法,还能了解到完整的电商项目开发流程,包括前后端交互、数据库设计、用户认证、数据安全等多个方面,对提升综合开发能力大有裨益。

    node-v12.13.0-x64 .rar

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程。Node.js 使用了一个事件驱动、非阻塞 I/O 模型,使其轻量又高效,非常适合构建数据密集型的实时应用...

    简单实现node.js图片上传

    Node.js图片上传简单实现的知识点包括以下几个方面: 1. Node.js环境的搭建: - Node.js是一种基于Chrome V8引擎的JavaScript运行环境,用于服务器端编程。 - 它可以利用JavaScript进行后端开发,并且不需要编译...

    node.js文件上传及查看

    Node.js 是一个基于Chrome V8引擎的JavaScript运行环境,由于其非阻塞I/O模型和事件驱动的特性,使得它非常适合用于构建高效、可扩展的网络应用,如文件上传服务。 首先,要实现文件上传,通常会使用一些流行的Node...

    node.js的文件上传

    Node.js以其非阻塞I/O模型和JavaScript的易用性,使得处理文件上传变得高效且灵活。本篇文章将深入探讨Node.js中实现文件上传的方法、相关库以及最佳实践。 首先,Node.js本身并不直接支持文件上传功能,但可以通过...

    node.js图片上传

    在本文中,我们将深入探讨如何使用Node.js实现一个图片上传功能。Node.js作为一个基于Chrome V8引擎的JavaScript运行环境,因其非阻塞I/O模型和事件驱动的特点,使其成为构建高性能网络应用的理想选择,包括处理文件...

    Nfile是一个基于Node.js的简易文件系统支持文档的上传编辑和预览

    Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它通过提供异步、非阻塞I/O模型来提高效率,使得服务器能够处理更多的并发连接,这对于网络应用来说非常关键。Node.js的模块化结构也使得代码可读性更强,易于...

    ueditor-node.js版本

    ueditor是一款广泛使用的JavaScript富文本编辑器,而ueditor-node.js则是其在Node.js环境中的实现,它允许开发者在服务器端处理与编辑器相关的业务逻辑,如数据存储、格式转换等。本篇文章将深入探讨ueditor-node.js...

    Node.js-AppleiCloud服务的NodeAPI

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程,极大地拓宽了JavaScript的应用场景。在这个"Node.js-AppleiCloud服务的NodeAPI"项目中,我们看到的...

Global site tag (gtag.js) - Google Analytics