我试图用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!");
});
}
答案 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);
}