如何使用节点js中的scp2将文件复制到远程服务器? [英] how to copy files to remote server using scp2 in node js?
问题描述
我想使用 scp2
包将文件从本地服务器复制到Node js中的远程服务器。首先..在复制或将文件移动到远程服务器后,使用 multer
上传到本地服务器的文件。
我的代码:
exports.newFileUpload = function(req,res,next){
var storage = multer.diskStorage({// multers disk storage settings
destination:function(req,file,cb){
cb(null,'uploads /');
},
filename:function(req,file,cb){
var datetimestamp = Date.now();
cb(null,datetimestamp +' - '+ file.originalname);
}
});
var upload = multer({storage:storage,limits:{fieldSize:25 * 1024 * 1024}})。array('file');
upload(req,res,function(err){
console.log(req.body);
console.log(req.files);
if(err){
res.json({error_code:1,err_desc:err});
console.log(Error Occured,err);
return;
} else {
client.scp(req.files [0] .path,{
host:'www.do ********。in',
用户名:'username',
密码:'*********',
路径:'/ uploads /'
},函数(错误){
console.log(req.files [0] .path);
console.log(在远程服务器上传的文件);
res.json({error_code:0,err_desc:null});
});
}
});
}
文件上传到本地服务器完全正常工作,之后到远程服务器抛出错误
错误:
{date:'Mon Nov 13 2017 01 :00:22 GMT + 0530(印度标准时间)',
流程:
{pid:5664,
uid:null,
gid:null,
cwd :'D:\\sample',
execPath:'C:\\Program Files \\\\
odejs \\\\
ode.exe',
version:'v8.2.1 ',
argv:['C:\\Program Files \\\\
odejs \\\\
ode.exe','D:\\sample \\\\\。js'],
memoryUsage:
{rss:69619712,
heapTotal:45162496,
heapUsed:39166256,
external:149849}},
os:{loadavg: [0,0,0],正常运行时间:3537.1088452},
跟踪:
[{column:11,
file:'util.js',
function:'Object。 exports._errnoException',
l ine:1024,
方法:'_ errnoException',
native:false},
{column:20,
file:'util.js',
函数: 'exports._exceptionWithHostPort',
行:1047,
方法:'_ emceptionWithHostPort',
native:false},
{column:14,
file:'net .js',
函数:'TCPConnectWrap.afterConnect [as oncomplete]',
行:1150,
方法:'afterConnect [as oncomplete]',
native:false} ],
stack:['错误:发送后不能设置标题。',
'在validateHeader(_http_outgoing.js:504:11)',
'at at ServerResponse.header的ServerResponse.setHeader(_http_outgoing.js:511:3)',
'(D:\\sample \\\\
ode_modules \\express \\ lib \\ response.js:730:10)',
'在ServerResponse.send(D:\\sample \\\\
ode_modul)在ServerResponse.json(D:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\ express \\lib\\\\ nc响应:js:256:15)',
'在D:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\在Client.closeHandler(D:\\\\\\ $ b'在emitNone(events.js:105:13)',
'在Client.emit(events.js:207:7)',
'在客户端。< anonymous> (D:\\sample\\\\
ode_modules \\scp2 \\lib\\client.js:88:10)',
'在emitNone(events.js:105 :13)',
'在Client.emit(events.js:207:7)',
'在Socket。< anonymous> (D:\\sample\\\\
ode_modules \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ :13)',
'在Socket.emit(events.js:210:7)',
'在Pipe._handle.close [as _onclose](net.js:549:12)' ]}
无法识别错误,等待建议或可能的方法来解决问题。
提前致谢!
不能直接使用 multer
将文件上传到远程服务器,但我们可以使用 multer-sftp,scp,ssh
技术方法
当使用Node Js将文件上传到远程服务器时,我们需要注意一些事情
- 用户名和密码应该是正确的
- 相应的端口号应该在远程服务器中打开
- 远程目录应该有写作使用scp2将文件移动到远程服务器:
p $ p>exports.newFileUpload = function(req,res,next){
var storage = multer.diskStorage({// multers disk storage settings
destination :function(req,file,cb){
cb(null,'uploads /');
},
filename:function(req,file,cb){
var datetimestamp = Date.now();
cb(null,datetimestamp +' - '+ file.originalname);
}
});
var upload = multer({storage:storage,limits:{fieldSize:25 * 1024 * 1024}})。array('file');
upload(req,res,function(err){
console.log(req.body);
console.log(req.files);
if(err){
res.json({error_code:1,err_desc:err});
console.log(Error Occured,err);
return;
} else {
client.scp(req.files [0] .path,{
host:'host',
用户名:'username',
密码: '*********',
路径:'/ uploads /'
},函数(错误){
console.log(req.files [0] .path );
console.log(在远程服务器上传的文件);
});
}
});
}
注意:应该安装必需的软件包以及在代码中声明需要的东西。
参考文献: multer-sftp , scp2 , node-ssh
I want to copy the files from local server to remote server in Node js using
scp2
package. First of all.. Files uploaded to local server usingmulter
after that copy or move that files to remote server.My Code:
exports.newFileUpload = function(req , res , next){ var storage = multer.diskStorage({ //multers disk storage settings destination: function (req, file, cb) { cb(null, 'uploads/'); }, filename: function (req, file, cb) { var datetimestamp = Date.now(); cb(null, datetimestamp+ '-' +file.originalname); } }); var upload = multer({ storage: storage, limits: { fieldSize: 25 * 1024 * 1024 }}).array('file'); upload(req,res,function(err){ console.log(req.body); console.log(req.files); if(err){ res.json({error_code:1,err_desc:err}); console.log("Error Occured", err); return; }else{ client.scp(req.files[0].path, { host: 'www.do********.in', username: 'username', password: '*********', path: '/uploads/' }, function(err) { console.log(req.files[0].path); console.log("files uploaded in remote server"); res.json({error_code:0,err_desc:null}); }); } }); }
file upload to local server is perfectly working, after that to remote server throwing error
Error:
{ date: 'Mon Nov 13 2017 01:00:22 GMT+0530 (India Standard Time)', process: { pid: 5664, uid: null, gid: null, cwd: 'D:\\sample', execPath: 'C:\\Program Files\\nodejs\\node.exe', version: 'v8.2.1', argv: [ 'C:\\Program Files\\nodejs\\node.exe', 'D:\\sample\\app.js' ], memoryUsage: { rss: 69619712, heapTotal: 45162496, heapUsed: 39166256, external: 149849 } }, os: { loadavg: [ 0, 0, 0 ], uptime: 3537.1088452 }, trace: [ { column: 11, file: 'util.js', function: 'Object.exports._errnoException', line: 1024, method: '_errnoException', native: false }, { column: 20, file: 'util.js', function: 'exports._exceptionWithHostPort', line: 1047, method: '_exceptionWithHostPort', native: false }, { column: 14, file: 'net.js', function: 'TCPConnectWrap.afterConnect [as oncomplete]', line: 1150, method: 'afterConnect [as oncomplete]', native: false } ], stack:[ 'Error: Can\'t set headers after they are sent.', ' at validateHeader (_http_outgoing.js:504:11)', ' at ServerResponse.setHeader (_http_outgoing.js:511:3)', ' at ServerResponse.header (D:\\sample\\node_modules\\express\\lib\\response.js:730:10)', ' at ServerResponse.send (D:\\sample\\node_modules\\express\\lib\\response.js:170:12)', ' at ServerResponse.json (D:\\sample\\node_modules\\express\\lib\\response.js:256:15)', ' at D:\\sample\\routes\\part.js:302:10', ' at Client.closeHandler (D:\\sample\\node_modules\\scp2\\lib\\scp.js:48:13)', ' at emitNone (events.js:105:13)', ' at Client.emit (events.js:207:7)', ' at Client.<anonymous> (D:\\sample\\node_modules\\scp2\\lib\\client.js:88:10)', ' at emitNone (events.js:105:13)', ' at Client.emit (events.js:207:7)', ' at Socket.<anonymous> (D:\\sample\\node_modules\\ssh2\\lib\\client.js:225:10)', ' at emitOne (events.js:115:13)', ' at Socket.emit (events.js:210:7)', ' at Pipe._handle.close [as _onclose] (net.js:549:12)' ] }
Couldn't able to identify the error, awaiting suggestions or possible ways to solve the problem.
Thanks in Advance !
解决方案Uploading Files to remote server using
multer
is not possible directly, But we can play around withmulter-sftp, scp, ssh
techniques MethodologiesWhen Uploading Files to remote server using Node Js, We need to take care few things
- Username and password should be correct
- The Corresponding port number should be open in remote server
- The Remote Directory Should have Write Access
Working Code using scp2 to move the files to remote server:
exports.newFileUpload = function(req , res , next){ var storage = multer.diskStorage({ //multers disk storage settings destination: function (req, file, cb) { cb(null, 'uploads/'); }, filename: function (req, file, cb) { var datetimestamp = Date.now(); cb(null, datetimestamp+ '-' +file.originalname); } }); var upload = multer({ storage: storage, limits: { fieldSize: 25 * 1024 * 1024 }}).array('file'); upload(req,res,function(err){ console.log(req.body); console.log(req.files); if(err){ res.json({error_code:1,err_desc:err}); console.log("Error Occured", err); return; }else{ client.scp(req.files[0].path, { host: 'host', username: 'username', password: '*********', path: '/uploads/' }, function(err) { console.log(req.files[0].path); console.log("files uploaded in remote server"); }); } }); }
Note: Should install required packages as well as declare require things in code.
References: multer-sftp, scp2 , node-ssh
这篇关于如何使用节点js中的scp2将文件复制到远程服务器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!