78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
import SftpClient from 'ssh2-sftp-client';
|
|
import path from 'path';
|
|
import fs from 'fs/promises'; // 使用 fs 的 Promise 版本
|
|
import { fileURLToPath } from 'url';
|
|
|
|
// 如果使用环境变量,取消下面这行的注释
|
|
// require('dotenv').config();
|
|
// 获取当前模块的文件路径
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
// 获取当前模块所在的目录路径
|
|
const __dirname = path.dirname(__filename);
|
|
const config = {
|
|
// 如果使用环境变量
|
|
// host: process.env.SFTP_HOST,
|
|
// port: parseInt(process.env.SFTP_PORT) || 22,
|
|
// username: process.env.SFTP_USER,
|
|
// password: process.env.SFTP_PASS,
|
|
|
|
// 直接配置
|
|
host: '36.103.203.89',
|
|
port: 22,
|
|
username: 'liuyang',
|
|
password: 'Asdf!234',
|
|
// 或者使用私钥认证
|
|
// privateKey: fs.readFileSync('/path/to/your/key')
|
|
};
|
|
|
|
// 本地打包目录
|
|
const localDir = path.join(__dirname, 'dist');
|
|
// 服务器目标目录
|
|
// const remoteDir = process.env.SFTP_REMOTE_DIR; // 如果使用环境变量
|
|
const remoteDir = '/home/ubuntu/mnt/Teacher_Evaluation/nginx/dist';
|
|
|
|
async function uploadToServer() {
|
|
const sftp = new SftpClient();
|
|
try {
|
|
console.log('开始连接服务器...');
|
|
await sftp.connect(config);
|
|
|
|
console.log('连接成功,检查远程目录是否存在...');
|
|
const exists = await sftp.exists(remoteDir);
|
|
|
|
if (exists) {
|
|
console.log('清空远程目录中的内容...');
|
|
// 获取远程目录中的所有文件和文件夹
|
|
const remoteList = await sftp.list(remoteDir);
|
|
|
|
// 依次删除每个文件和文件夹
|
|
for (const item of remoteList) {
|
|
const remotePath = `${remoteDir}/${item.name}`;
|
|
if (item.type === 'd') {
|
|
// 如果是目录,递归删除
|
|
await sftp.rmdir(remotePath, true);
|
|
} else {
|
|
// 如果是文件,直接删除
|
|
await sftp.delete(remotePath);
|
|
}
|
|
}
|
|
} else {
|
|
console.log('远程目录不存在,创建目录...');
|
|
await sftp.mkdir(remoteDir, true);
|
|
}
|
|
|
|
console.log('开始上传文件...');
|
|
await sftp.uploadDir(localDir, remoteDir);
|
|
|
|
console.log('文件上传完成!');
|
|
return true;
|
|
} catch (err) {
|
|
console.error('上传过程中发生错误:', err);
|
|
return false;
|
|
} finally {
|
|
sftp.end();
|
|
}
|
|
}
|
|
|
|
uploadToServer();
|