сегодня у меня проблема с jsftp. Когда я запускаю свой скрипт и upload.txt
пуст, jsftp правильно загружает пустой файл на сервер. Когда upload.txt
является файлом utf-8 javascript, например const x = "Hello World!";
, jsftp загружает файл с именем .pureftpd-upload.5e35d750.15.79c5.1b3bbd87
с 0 байтами (= нет данных).
Вот мой сценарий:
var ftp = new jsftp({
host: "ftp.example.url",
port: 21,
user: user.name,
pass: user.pass
});
ftp.auth(user.name, user.pass, function(err){
if(err){
openDialog();
console.error(err);
throw err;
}
else{
ftp.put(path_datafile, '/directory/hello.js', function(err){
console.error(err);
throw err;
});
}
});
(в выводе нет ошибок)
Для тех, кто говорит, что вам нужно сначала прочитать файл:
var ftp = new jsftp({
host: "ftp.example.url",
port: 21,
user: user.name,
pass: user.pass
});
fs.readFile(path_datafile, 'utf8', function(err, buff){
if(err){
console.log(err);
}
else{
ftp.put(buff, '/directory/hello.js', function(err){
console.error(err);
throw err;
});
}
});
Не сработало вообще. Затем он показывает ошибку:
Local file doesn't exist
Ошибка здесь в том, что модуль fs
теперь преобразует файл в utf-8 fs.readfile(file, 'utf8', action)
. Чтобы решить эту проблему, пишите только fs.readfile(file, action)
, чтобы файл выводился в байтах. Скрипт выдаст false
, но работает нормально.
Так что Рагнар прав. Его ответ правильный, когда вы не используете кодировку utf8
с помощью fs. Не используйте его, и он будет работать.
Рагнар: { ссылка }
Его ответ: { ссылка }