如题,最近有个需求,node做中间层,接受前端传来的文件,并上传到java后台,网上的很多方法只是在node层接受文件并保存 如:formidable模块实现,求助各位大牛
文件上传为啥不是独立服务?能做到,但中转传一次,没啥意义
随手写的 你看看能不能用
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去。不过如果不是必须,建议不转运
request
http
为啥用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(); });
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
文件上传为啥不是独立服务?能做到,但中转传一次,没啥意义
随手写的 你看看能不能用
如果非要用node,接受到文件保存后,使用
request或者干脆http模块转送到java server去。不过如果不是必须,建议不转运为啥用node转,直接在前面nginx上转发不是更方便么。
@chenjiyong 混合的情况下 同时有多个文件和表单字段数据需要上传?
@leim 老大让我们走node层上传
我是这么写的