如何使用节点js中的scp2将文件复制到远程服务器? [英] how to copy files to remote server using scp2 in node js?

查看:135
本文介绍了如何使用节点js中的scp2将文件复制到远程服务器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用 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将文件上传到远程服务器时,我们需要注意一些事情


  1. 用户名和密码应该是正确的

  2. 相应的端口号应该在远程服务器中打开

  3. 远程目录应该有写作使用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 using multer 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 with multer-sftp, scp, ssh techniques Methodologies

    When Uploading Files to remote server using Node Js, We need to take care few things

    1. Username and password should be correct
    2. The Corresponding port number should be open in remote server
    3. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆