最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

node.js實(shí)現(xiàn)多圖片上傳實(shí)例

 更新時間:2014年06月03日 10:40:29   作者:  
這篇文章主要介紹了node.js實(shí)現(xiàn)多圖片上傳實(shí)例,包括路由、控制器和視圖的源碼,重點(diǎn)在圖片上傳處理程序,需要的朋友可以參考下

先上效果圖:

這是我當(dāng)時做多圖片的代碼,拿出來給大家借鑒一下(有些地方需要親們自己改一下,大方向是對的)

總共涉及到三處文件(常規(guī)來說)

1.路由入口文件(我這里是/routes.js,很多時候會在/app.js)

復(fù)制代碼 代碼如下:

  //添加美食
  app.all('/add', users.add);

2.路由控制器文件(我這里是/routes/users.js)
復(fù)制代碼 代碼如下:

//添加美食
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:'發(fā)布美食-'+config.name,name:config.name,user:user});
  } else  if (req.method == "POST") {
    //獲取數(shù)據(jù)
    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文件下面
            //在移動的時候確定路徑已經(jīng)存在,否則會報錯
            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);
                    //上傳處理完成
                    //數(shù)據(jù)
                    var data = {
                        x:x,//經(jīng)度
                        y:y,//維度
                        cat_id:cat_id,//分類id
                        cat_name:cat_name,//分類名稱
                        address:address,//地址
                        title:title,//標(biāo)題
                        desc:desc,//簡介
                        content:content,//內(nèi)容
                        pics:pics,//圖片字段,以','隔開多張圖片
                        price:price,//價格
                        tags:tags,//標(biāo)簽 以','隔開多個
                        add_time:add_time,//支持度
                        support:support,//支持度 默認(rèn)為0
                        uid:uid//用戶id 可匿名
                    };
                    food_preDao.insert(data, function (err, food) {
                        if(err){
                            res.json({err:100,content:'數(shù)據(jù)庫錯誤'});
                        }else{
                            res.json({err:0,content:'發(fā)布成功!',data:food});
                        }

                    });
                }
                    }
                });


            });
            }
         });
    }else{
        //沒有圖片
        //數(shù)據(jù)
        var data = {
            x:x,//經(jīng)度
            y:y,//維度
            cat_id:cat_id,//分類id
            cat_name:cat_name,//分類名稱
            address:address,//地址
            title:title,//標(biāo)題
            desc:desc,//簡介
            content:content,//內(nèi)容
            pics:pics,//圖片字段,以','隔開多張圖片
            price:price,//價格
            tags:tags,//標(biāo)簽 以','隔開多個
            add_time:add_time,//支持度
            support:support,//支持度 默認(rèn)為0
            uid:uid//用戶id 可匿名
        };
        food_preDao.insert(data, function (err, food) {
            if(err){
                res.json({err:100,content:'數(shù)據(jù)庫錯誤'});
            }else{
                res.json({err:0,content:'發(fā)布成功!',data:food});
            }

        });
    }


  }
};


3.視圖文件(我這里是/views/users/food_add.ejs)
復(fù)制代碼 代碼如下:

<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 結(jié)果

            var name;
            name=path.split('\\');
            var bb=name[name.length-1];            
            //alert(bb.substr(0,bb.indexOf('.')));  //AddFile 結(jié)果

            $(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>經(jīng)度:</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>標(biāo)題:</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>內(nèi)容:</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>標(biāo)簽:</td><td><input type="text" name="tags" id="tags" /></td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="提交" /></td>
        </tr>
    </table>
</form>


 

相關(guān)文章

  • 從零開始學(xué)習(xí)Node.js系列教程四:多頁面實(shí)現(xiàn)數(shù)學(xué)運(yùn)算的client端和server端示例

    從零開始學(xué)習(xí)Node.js系列教程四:多頁面實(shí)現(xiàn)數(shù)學(xué)運(yùn)算的client端和server端示例

    這篇文章主要介紹了Node.js多頁面實(shí)現(xiàn)數(shù)學(xué)運(yùn)算的client端和server端,結(jié)合具體實(shí)例形式分析了nodejs客戶端提交與服務(wù)端處理實(shí)現(xiàn)數(shù)學(xué)運(yùn)算的相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • Node.js如何提取文件中的中文字符

    Node.js如何提取文件中的中文字符

    這篇文章主要介紹了Node.js如何提取文件中的中文字符,本文介紹了在Node.js開發(fā)中如何使用代碼提取文件中的中文字符,幫助開發(fā)者更好地處理中文文本數(shù)據(jù),提高開發(fā)效率
    2023-05-05
  • nodejs版本過高導(dǎo)致vue-cli項(xiàng)目無法正常運(yùn)行的幾種解決方案

    nodejs版本過高導(dǎo)致vue-cli項(xiàng)目無法正常運(yùn)行的幾種解決方案

    這篇文章主要給大家介紹了關(guān)于nodejs版本過高導(dǎo)致vue-cli項(xiàng)目無法正常運(yùn)行的幾種解決方案,在項(xiàng)目中你可能需要用到的node版本太低,但是你所下的node版本是最新的,這時候就會報錯,需要的朋友可以參考下
    2023-07-07
  • Nodejs中的this詳解

    Nodejs中的this詳解

    本文給大家匯總介紹了下nodejs中的this,nodejs中的this和在瀏覽器中javascript中的this還是有很大的差異的,小伙伴們可以研究下
    2016-03-03
  • CentOS上安裝Node.js和mongodb筆記

    CentOS上安裝Node.js和mongodb筆記

    這篇文章主要介紹了CentOS上安裝Node.js和mongodb筆記,本文講解了Python安裝、Node.js安裝、npm安裝、mongodb驅(qū)動安裝、mongodb數(shù)據(jù)庫操作測試代碼等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • node.js中express-session配置項(xiàng)詳解

    node.js中express-session配置項(xiàng)詳解

    本篇文章主要介紹了node.js中express-session配置項(xiàng)詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • nodejs進(jìn)階(6)—連接MySQL數(shù)據(jù)庫示例

    nodejs進(jìn)階(6)—連接MySQL數(shù)據(jù)庫示例

    本篇文章主要介紹了nodejs進(jìn)階(6)—連接MySQL數(shù)據(jù)庫示例,詳細(xì)的介紹了NodeJS操作MySQL數(shù)據(jù)庫,作為應(yīng)用最為廣泛的開源數(shù)據(jù)庫則成為我們的首選,有興趣的可以了解一下。
    2017-01-01
  • Node快速切換版本、版本回退(降級)、版本更新(升級)

    Node快速切換版本、版本回退(降級)、版本更新(升級)

    這篇文章主要介紹了Node快速切換版本、版本回退(降級)、版本更新(升級),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 如何用Node.js編寫內(nèi)存效率高的應(yīng)用程序

    如何用Node.js編寫內(nèi)存效率高的應(yīng)用程序

    這篇文章主要介紹了如何用Node.js編寫內(nèi)存效率高的應(yīng)用程序,對Node.js感興趣的同學(xué),可以參考下
    2021-04-04
  • node(koa2) web應(yīng)用模塊介紹詳解

    node(koa2) web應(yīng)用模塊介紹詳解

    這篇文章主要介紹了node(koa2) web應(yīng)用模塊介紹詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評論

景泰县| 潞西市| 昂仁县| 蓝田县| 泸水县| 巴彦淖尔市| 湘潭县| 拉萨市| 庆城县| 秦皇岛市| 渭南市| 凤山市| 南阳市| 海晏县| 阳山县| 宁河县| 清水河县| 全州县| 察隅县| 布拖县| 汉阴县| 合肥市| 台江县| 易门县| 沙坪坝区| 镶黄旗| 鸡西市| 运城市| 靖边县| 延边| 镇远县| 泽州县| 略阳县| 大悟县| 北宁市| 东城区| 镇坪县| 桐柏县| 通道| 诏安县| 潢川县|