管理后台
需求:项目结构 node模板渲染 + node中转服务器 + java后端
中间需要前端上传文件到node中转服务 node中转服务再传文件到java后端
1. 前端上传文件到node服务
// multer 读取formdata上传的文件
var multer = require("multer"); // 下载模块 npm i multer -s
var upload = multer({dest:'./public/uploads'}); // 文件存储位置
router.post('/uc/v1/file/upload', upload.single('file'),function( req,res ){
var file_type;
if (req.file.mimetype.split('/')[0] == 'image'){
file_type = '.' + req.file.mimetype.split('/')[1];
}
if (file_type) {
fs.rename(req.file.path, req.file.path + file_type, function (err, doc) {
if (err) {
console.error(err);
return;
}
httpA.postFile( req,res ,'./public/uploads/' + req.file.filename + file_type,req.file.filename + file_type );
})
return;
} else{
res.json({ code:"1",message:"上传失败" })
}
})
2. node服务传文件到后端
let httpA = {
/**
*
* @param {*} req request 对象
* @param {*} res responese 对象
* @param {*} filepath 文件路径
* @param {*} filename 文件名称 name+扩展名
*/
postFile( req , res , filepath , filename ){
var options = {
hostname:config.adminHost,
port: config.adminPort,
path: req._parsedUrl.path,
method: 'POST'
}
// 模仿 浏览器传文件
var boundaryKey = '----' + req.headers['content-type'].split('----')[1]; //生成分隔数据
fs.readFile( filepath , function (err, data) { //读取需要上传的文件内容
if( err ){
res.json( { code:1, message : "node读取文件错误",error:err });
}else{
//拼装分隔数据段
var payload = '--' + boundaryKey + '\r\n' + 'Content-Disposition:form-data; name="file"; filename="'+filename+'"\r\n' + 'Content-Type:text/plain\r\n\r\n';
payload += data;
payload += '\r\n--' + boundaryKey + '--';
//发送请求
var reqA = http.request(options, function (response) {
response.setEncoding('utf8');
response.on('data', function (chunk) {
res.json( JSON.parse( chunk ) );
});
fs.unlink(filepath, function( err ){ // 上传文件之后 删除文件
// if(err){
// throw err;
// }
})
});
reqA.on('error', function(e) {
console.error("error:"+e);
});
//把boundary、要发送的数据大小以及数据本身写进请求
reqA.setHeader('Content-Type', req.headers['content-type']);
reqA.setHeader('Connection', 'keep-alive');
reqA.setHeader('Content-Length', Buffer.byteLength(payload, 'utf8'));
reqA.setHeader('Authorization', localStorage.getItem("user"+ req.headers.authorization ));
reqA.write(payload);
reqA.end();
}
});
}
}