初学nodejs+express,打造cms系统(5)

野生程序猿-杂烧4年前案例分享682

今天来尝试做上传功能,其实就是一个上传接口。已经跟php完全两样了,两眼一抹黑,直接百度搜索出来拿过来用,也不知道性能如何,反正可以跑通,需要找机会验证一下。

【upload.js】

//api库 管理员
var fs = require('fs');
var multiparty = require('multiparty');
var path = require('path')

var api={

    init(base,$model,$ac){

        eval(require('./api_base').ready());

    }

    ,action:{
       index(){
            var me=this;
            var res=me.res;
            var req=me.req;
            /* 生成multiparty对象,并配置上传目标路径 */
            var form = new multiparty.Form();
            var $type=me.base.fun.str(req.query["type"]);
            
            /* 设置编辑 */
            form.encoding = 'utf-8';
            //设置文件存储路劲
            form.uploadDir = './upload';
            //设置文件大小限制
            form.maxFilesSize = 1024 * 1024 * 1024;
            // form.maxFields = 1000;  //设置所有文件的大小总和
            //上传后处理
            form.parse(req, function(err, fields, files) 
            {
                var output={success:false,url:url,picurl:url,msg:'上传失败'};
                var filesTemp = JSON.stringify(files, null, 2);
                if(err) {
                    console.log('parse error:' + err);
                }else {

                    var uploadedPath = files['file'][0]['path'];
                    
                    uploadedPath=path.resolve(__dirname, '..')+'/'+uploadedPath;
                    path_old=uploadedPath.replace(/\\/g,'/');

                    var www_path=path.resolve(__dirname, '..')+'/bin/wwwroot';
                    var date_dir=me.base.fun.date(1);
                    var houzhuiming=me.base.fun.get_houzhuiming(uploadedPath);
                    var new_name=me.base.fun.date('yyyyMMddhhmmss')+'_'+me.base.fun.randnum(10)+'.'+houzhuiming;
                    
                    var mkdir_result=me.base.fun.mkdir(www_path+`/upload/${date_dir}/`);

                    var url=`upload/${date_dir}/${new_name}`;
                    var path_new = www_path+'/' + url;
                    

                    path_new=path_new.replace(/\\/g,'/');
                    console.log(path_old);
                    console.log(path_new);
                    //重命名为真实文件名
                    var rename_result=me.base.fun.rename(path_old, path_new);
                    var unlink_result=me.base.fun.unlink(path_old);

                    console.log(mkdir_result);
                    console.log(rename_result);
                    console.log(unlink_result);
                    if($type=='')
                    {
                        if(rename_result)
                        {
                            var output={success:true,url:url,picurl:url,msg:'上传成功'};
                        }else{
                            var output={success:false,url:url,picurl:url,msg:'上传失败'};
                        }
                    }else if($type=='editor_tinymce'){
                        if(rename_result)
                        {
                            var output={success:true,location:'/'+url,url:url,picurl:url,msg:'上传成功'};
                        }else{
                            var output={success:false,url:url,picurl:url,msg:'上传失败'};
                        }
                    }else{
                        var output={success:false,url:url,picurl:url,msg:'上传失败'};
                    }

                    
                }
                
                res.json(output);
            })

        
       }
    }


};



module.exports = api;



再来个excel.js

//excel
var nodeExcel = require('excel-export');
var xlsx = require('xlsx');

var excel={

    str(value){
        
        try{
            if(typeof(value)=='undefined' )
            {
                var result='';
            }else{
                var result=value;
            }
        }catch(e){
            var result='';
        }
        return result+'';
    }


    ,export(_headers,data,mysheet){
        console.log('export');
        var conf ={};
        conf.name = mysheet;
        conf.cols = [];

        
        for(var key in _headers){
            
            var col = {};
            col.caption = _headers[key];
            col.type = 'string';
            col.width=28;
            conf.cols.push(col);
        }
        var rows=[];
        for(var i in data)
        {
            var this_arr=[];
            for(var key in _headers){
            
                this_arr.push(this.str(data[i][key]));
            }  

            rows.push(this_arr);
        }
        


        conf.rows = rows;

        console.log(conf);
        var result = nodeExcel.execute(conf);
        return result;

    }

    ,res_excel(res,_headers,data,mysheet,name)
    {
        console.log('res_excel');
        console.log(_headers);
        console.log(data);
        if(!name)
        {
            var name=(new Date()).valueOf();
        }
        name=encodeURI(name);
        if(!mysheet)
        {
            var mysheet='mysheet';
        }
        var result=this.export(_headers,data,mysheet);
        res.setHeader('Content-Type', 'application/vnd.openxmlformats');
        res.setHeader("Content-Disposition", "attachment; filename=" + name+".xlsx");
        res.end(result, 'binary');

    }

    ,read(path)
    {
        

        let workbook = xlsx.readFile(path); //workbook就是xls文档对象

        let sheetNames = workbook.SheetNames; //获取表明

        let sheet = workbook.Sheets[sheetNames[0]]; //通过表明得到表对象


        var data =xlsx.utils.sheet_to_json(sheet); //通过工具将表对象的数据读出来并转成json

        return data;
       
    }


    
};





module.exports = excel;


部分模板 页面细节没有贴出来,整体其实翻的php的,为了像php那样拥有全局变量,所以很多挂载到base上实现的功能,其目的也是为了简化开发。虽然开发水平比较次,但是还是带着框架思路的。目前没有实现php框架100%的功能,只实现了80%左右,开发了一个雏形,如果后期实际项目中遇到再继续完善。

相关文章

初学nodejs+express,打造cms系统(1)

初学nodejs+express,打造cms系统(1)

先前php开发了一套cms系统,算半个框架吧,自己常年敏捷开发项目用,先给大家介绍一下。主要包含以下功能先介绍一下我原先的php系统包含哪些功能?1、模型管理。建立个模型,给模型建立字段如:姓名、身份...

初学nodejs+express,打造cms系统(2)

先安装需要的组件,主要是express脚手架,deasync,mysql,cookie-parserpackage.json{   "name": ...

初学nodejs+express,打造cms系统(3)

上次聊到了我的base.js 插入式编程,接着聊编程正题首先是数据库操作类【db_mysql.js】var mysql=require('mysql');  va...

初学nodejs+express,打造cms系统(6)补充运行环境优化

初学nodejs+express,打造cms系统(6)补充运行环境优化

本来主要功能完成了,但是感觉少了点什么,其实就是自创(或许也有别人想到吧)了一套运行环境方案。实际部署的时候,我们是需要与nginx结合的,使用nodejs来提供静态资源的web服务非常的不nice,...

初学nodejs+express,打造cms系统(4)

前面已经改造了基础模块,下面到了页面制作环节。先前的脚手架已经支持ejs了,在views文件夹里出现了测试ejs,下面基本上是锻炼自己仿写能力了。【routes/api.js】var exp...