upload.js 7.91 KB
var request = require('request');
var _ = require('lodash');
var fs = require('fs');
var ipaddr = require('ipaddr.js');
var domain = require('../../config/common.js').domain;

var searchDomain = require('../../config/searchApi.js').yohoSearch;

//老上传地址
var oldUploadUrl = 'http://upload.static.yohobuy.com';

//上传异常的信息
var errBackMsg = {
    code: "500",
    message: "接口异常"
};

//var domain = 'http://172.16.6.227:8088/platform'; //马力
// var domain = 'http://172.16.6.162:8088/platform';
//var domain = 'http://172.16.6.240:8088/platform';
//var domain = 'http://172.16.6.225:8080/platform';//王伟
function getHeader(req,res){
    var headers = {};
    if (req.session && req.session.user) {
        var ipObject = ipaddr.process(req.ip).octets
        var ip = ipObject ? ipObject.join('.') : req.ip;

        headers = {
            'x-user-id': req.session.user.auth.pid,
            'x-user-name': req.session.user.auth.account,
            'x-site-type': 1,
            'x-client-ip': ip
        };

    } else {
        res.json({
            code: "501",
            message: "用户失效,请重新登录"
        });
    }
    return headers;
}
/**
 * 上传图片
 * @param req
 * @param res
 */
exports.uploadFile = function (req, res) {
    var headers = getHeader(req, res);
    if (req.is("multipart/form-data")) {
        var url = [];
        for (var key in req.body) {
            url.push(key + "=" + req.body[key]);
        }
        console.log("req.body",req.body);
        //req.body.file = fs.createReadStream(req.files[req.body.filename].path);

        if (req.body.__type == "batch-import") {
            req.body.file = fs.createReadStream(req.files[req.body.filename].path);
            request.post({
                url: domain + '/batch/import?' + url.join("&"),
                formData: req.body,
                headers: headers
            }, function optionalCallback(error, httpResponse, body) {
                if (error) {
                    console.error('upload failed:', error);
                    res.json(errBackMsg);
                }
                if (!error && httpResponse.statusCode == 200) {
                    var json = JSON.parse(body);
                    json.status = true;
                    res.json(json);
                } else {
                    res.json(errBackMsg);
                }
            });
        } else {
            var files = req.files[req.body.filename];
            //判断是单张传还是多张传
            var flag = Object.prototype.toString.call(files) === '[object Array]';
            //如果是单张,则数组化
            if (!flag) {
                files = [];
                files.push(req.files[req.body.filename]);
            }
            req.body.files = [];
            req.body.fileNames = [];
            for (var index = 0; index < files.length; index++) {
                req.body.files[index] = fs.createReadStream(files[index].path);
                req.body.fileNames[index] = files[index].name;
            }

            //如果是goodsimg(商品)的图片,灰度到老系统的上传地址
            if (req.body.bucket === 'goodsimg') {
                //req.body.filename = req.files[req.body.filename].path;
                request.post({
                    url: oldUploadUrl,
                    formData: {
                        fileData: req.body.files,
                        project: req.body.bucket
                    }
                }, function (error, resd, body) {
                    if (!error && resd.statusCode == 200) {
                        var ret = JSON.parse(body);
                        if (ret.code === 200) {
                            //var imgUrl = ret.data.imagesList[0];
                            var imgs = ret.data.imagesList || [];
                            var datas = [];
                            for (var i = 0; i < imgs.length; i++) {
                                datas.push(joinimg(imgs[i]))
                            }
                            res.json({
                                code: 200,
                                data: datas[0],
                                datas:datas,
                                names: req.body.fileNames,
                                message: '上传成功',
                                status: true
                            });
                        }
                    }else{
                        res.json(errBackMsg);
                    }
                });
            } else {
                req.body.file = fs.createReadStream(req.files[req.body.filename].path);
                // delete req.body.files;
                request.post({
                    url: domain + '/fileupload/upload',
                    formData: req.body
                }, function (error, httpResponse, body) {
                    if (!error && httpResponse.statusCode == 200) {
                        var json = JSON.parse(body);
                        json.status = true;
                        res.json(json);
                    } else {
                        res.json(errBackMsg);
                    }
                });
            }
        }
    } else {
        res.json({
            code: "500",
            message: "请求类型错误"
        });
    }
};

/**
 * 组合全路径的图片地址
 */
function joinimg(url) {
    var urlArr = url.split('/');
    var domain = 'static.yhbimg.com/goodsimg';
    var num = urlArr[urlArr.length - 1].substr(1, 1);
    var url1 = domain + url;
    if (num == 1) {
        return 'http://img11.' + url1;
    } else {
        return 'http://img12.' + url1;
    }
}


exports.ueditor = function(req, res) {
    
    var headers = getHeader(req, res);

    if (req.is("multipart/form-data")) {
        req.body.files = [fs.createReadStream(req.files.upfile.path)];
        req.body.bucket="goodsimg";

        request.post({
            url: oldUploadUrl,
            formData: {
                fileData: req.body.files,
                project: req.body.bucket
            }
        }, function (error, resd, body) {
            if (!error && resd.statusCode == 200) {
                var ret = JSON.parse(body);
                if (ret.code === 200) {
                    //var imgUrl = ret.data.imagesList[0];
                    var imgs = ret.data.imagesList || [];
                    var datas = [];
                    for (var i = 0; i < imgs.length; i++) {
                        datas.push(joinimg(imgs[i]))
                    }

                    var result={};
                    if(datas.length>0&&datas[0]){
                        result.originalName=Date.now();
                        result.name=Date.now();
                        result.url=datas[0];
                        result.type=datas[0].substring(datas[0].lastIndexOf('.'));
                        result.state="SUCCESS";
                    }else{
                        result.state="FAIL";
                    }
                    console.log(JSON.stringify(result));
                    res.send(JSON.stringify(result));
                }
            }else{
                res.json(errBackMsg);
            }
        });


    } else {
        res.json({
            code: "500",
            message: "请求类型错误"
        });
    }
};

exports.linkFile = function(req, res) {
    request.get(domain+"/common/"+req.params.name+".xlsx").pipe(res);
};
/**
 * 导出文件
 * @param req
 * @param res
 */
exports.downFile = function(req, res) {
    var options = {
        method: 'POST',
        url: domain + '/batch/export',
        headers: {
            'content-type': 'application/json'
        },
        body: req.query,
        json: true
    };
    request(options).pipe(res);
};

exports.proxy = function(req,res) {
    var headers = getHeader(req, res);
    headers['Content-Type'] = 'application/json';
    request({
        headers:headers,
        url:domain + req.query.url,
        body:JSON.stringify(req.body)
    }).pipe(res);
};