使用jsftp上传文件会导致服务器上的文件大小为零

时间:2014-11-13 23:33:28

标签: javascript node.js ftp

我试图用jsftp将文件放在我的服务器上。每次运行我的代码时,我都会将一个文件写入服务器,但它有0个字节。我确定用户:host:etc是正确的。

这是代码。

function uploadHours() {
var jsftp = require("jsftp");

var ftp = new jsftp({
host: localStorage.host,
port: Number(localStorage.port), // defaults to 21
user: localStorage.user, // defaults to "anonymous"
pass: localStorage.ftpPass // defaults to "@anonymous"
});

ftp.auth(localStorage.user, localStorage.ftpPass, function(hadErr) {
if (!hadErr)
alert("auth succesfull")
});
;
ftp.put('C:/Program Files/Adobe/Adobe After Effects CC 2014/Support Files/Hours Tracker/index2.html', '/public_html/indexTester2.html', function(hadErr) {
  if (!hadError)
alert("File transferred successfully!");
});
}

2 个答案:

答案 0 :(得分:2)

我想我需要先读取文件。这是有效的。

 var JSFtp = require("jsftp");    
 var fs = require("fs");
 var Ftp = new JSFtp({ 
     host: localStorage.host,
     port: Number(localStorage.port),
     user: localStorage.user,
     pass: localStorage.ftpPass
 });
 var local = filePath;
 var remote = localStorage.ftpPath + logName;
 fs.readFile(local, function(err, buffer) {
     if(err) {
         console.error(err);
         callback(err);
     }
     else {
         Ftp.put(buffer, remote, function(err) {
             if (err) {
                 console.error(err);
                 callback(err);
             }
             else {
                 alert(file + " - uploaded successfuly");
                 callback();
             }
         });
     }
 });

答案 1 :(得分:0)

我有同样的问题。(使用jsftp上传文件会在vsftpd服务器上产生零大小的文件)

确保使用console.error来打印错误。

Ftp.put(buffer, remote, function(err) {
         if (err) {
             console.error(err);
             callback(err);
         }
         else {
             alert(file + " - uploaded successfuly");
             callback();
         }
     });

像这样的错误

{ [Error: connect ETIMEDOUT **192.168.0.4:64953**]
  code: 'ETIMEDOUT',
  errno: 'ETIMEDOUT',
  syscall: 'connect',
  address: '192.168.0.4',
  port: 64953 }

因为我的vsftpd使用了PASV模型,所以当它返回端口.jsftp时修改了ip。我解决了这个问题: 修改jsftp.js(jsftp / lib / jsftp.js)

var fixhost;

var Ftp = module.exports = function(cfg) {
    ...
    this.useList = cfg.useList || false;
    fixhost=this.host;//add
}

 Ftp.prototype.getPasvSocket = function(callback) {
    ...
    options.host=fixhost;//add
    var socket = self._pasvSocket = Net.createConnection(options);
}