node做中间层,文件上传到java? - CNode技术社区

node做中间层,文件上传到java?
发布于 9 年前 作者 Thstone37 6769 次浏览 来自 问答

如题,最近有个需求,node做中间层,接受前端传来的文件,并上传到java后台,网上的很多方法只是在node层接受文件并保存 如:formidable模块实现,求助各位大牛

7 回复

文件上传为啥不是独立服务?能做到,但中转传一次,没啥意义

随手写的 你看看能不能用

function(req, res, next) {
 // 获取 前端上传的文件
 var form = new formidable.IncomingForm()
 form.parse(req, function(err, fields, files) {
 // define err page
 if (err) return res.end('upload file error')
 var tmp_path = files.files.path
 var name = files.files.name
 var target_file = path.join(__dirname, '../public', 'upload', name)
 var target_path = './public/upload/' + name
 var source = fs.createReadStream(tmp_path)
 var dest = fs.createWriteStream(target_path)
 source.pipe(dest)
 dest.on('end', function() {
 url = 'java 接受服务器的 url'
	 // 上传给 java 服务端
 var r = request.post(url, function optionalCallback(error, response, body) {
 if (error) {
 console.log(error)
 }
 if (body.code === '200') {
 res.end('上传成功')
 }
 })
 var pushForm = r.form()
 pushForm.append('custom_file', fs.createReadStream(target_file), {filename: name})
 })
 })
}

如果非要用node,接受到文件保存后,使用request或者干脆http模块转送到java server去。不过如果不是必须,建议不转运

为啥用node转,直接在前面nginx上转发不是更方便么。

@chenjiyong 混合的情况下 同时有多个文件和表单字段数据需要上传?

@leim 老大让我们走node层上传

我是这么写的

var error = null; var opt = { host: host, port: port, path: path, method: ‘POST’, headers: req.headers } delete opt.headers[‘host’]; delete opt.headers[‘origin’]; delete opt.headers[‘referer’]; var htpReq = http.request(opt, function (htpRes) { htpRes.setEncoding(‘utf8’); var _data = ""; htpRes.on(‘data’, function (chunk) { _data += chunk; }); htpRes.on(‘end’, function () { if (error) { res.status(500); res.json(error); } else { res.send(_data); res.end(); } }); });

 htpReq.on('error', function (err) {
 error = err;
 });
 req
 .on('error', function (err) {
 res.status(500);
 res.json(err)
 })
 .on('aborted', function () {
 res.status(500);
 res.json(new Error('Request aborted'));
 })
 .on('data', function (buffer) {
 htpReq.write(buffer);
 })
 .on('end', function () {
 htpReq.end();
 });
回到顶部

AltStyle によって変換されたページ (->オリジナル) /