upload.js 9.07 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.189:8088/platform';//李建
//var domain ='http://172.16.6.120:8088/platform';//曹燕
//var domain ='http://172.16.6.250:2081/platform';//庞洁
/**
 * 获取请求头
 * @param req
 * @param res
 * @returns {{}}
 */
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]);
        }
        //上传excel文件
        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) {
                    return console.error('upload failed:', error);
                }
                if (!error && httpResponse.statusCode == 200) {
                    var json = JSON.parse(body);
                    json.status = true;
                    res.json(json);
                } else {
                    res.json(errBackMsg);
                }
            });
        }
        //上传txt文本文件
        else if(req.body.__type == "import-txt"){
            req.body.file = fs.createReadStream(req.files[req.body.filename].path);
            request.post({
                url: domain+"/couponSendFile/upload",
                formData: req.body,
                headers: headers
            }, function optionalCallback(error, httpResponse, body) {
                if (error) {
                    return console.error('upload failed:', error);
                }
                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') {
                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 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
                            });
                            return;
                        }
                    }
                    res.json(errBackMsg);
                });
            }
            //其余图片
            else {
                req.body.file = fs.createReadStream(req.files[req.body.filename].path);
                request.post({
                    url: domain + '/fileupload/upload',
                    formData: req.body
                }, function optionalCallback(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.getSaveState=function(req,res){
//     console.log("6666666");
//     request.post({
//         url: domain + '/product/queryBatchImportResult',
//         formData: req.body
//     }, function optionalCallback(error, httpResponse, body) {
//         console.log(body);
//         if (error) {
//             return console.error('upload failed:', error);
//         }
//         if (!error && httpResponse.statusCode == 200) {
//             var json = JSON.parse(body);
//             json.status = true;
//             // console.log(json);
//             res.json(json);
//         } else {
//             res.json(errBackMsg);
//         }
//     });
// }

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

    if (req.is("multipart/form-data")) {
        req.body.file = fs.createReadStream(req.files.upfile.path);
        req.body.bucket="goodsimg";
        request.post({
                url: domain + '/fileupload/upload',
                formData: req.body
        }, function optionalCallback(error, httpResponse, body) {
            // {"code":200,"data":"http://img12.static.yhbimg.com/goodsimg/2016/03/10/20/0258a569ab956e81339c7212bb23767c2d.jpg","message":"上传成功","status":true}
            // {"originalName":"demo.jpg","name":"demo.jpg","url":"upload\/demo.jpg","size":"99697","type":".jpg","state":"SUCCESS"}
            // {"originalName":"018da7232374448d10a565fdfe6211d078.jpg","name":"","url":"","type":".jpg","state":"SUCCESS"}
            if (!error && httpResponse.statusCode == 200) {
                var json = JSON.parse(body);
                var result={};
                result.originalName=json.data.substring(json.data.lastIndexOf('/')+1);
                result.name=result.originalName;
                result.url=json.data;
                result.type=json.data.substring(json.data.lastIndexOf('.'));
                result.state=json.message=="上传成功"?"SUCCESS":"FAIL";
                res.send(JSON.stringify(result));
            }else{
                res.send({code:"500",message:"接口异常"});
            }
        });

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

exports.linkFile = function(req, res) {
    request.get(domain+"/common/"+req.params.name+".xlsx").pipe(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);
}