js实现sftp
SFTP 客户端实现(JavaScript)
在 JavaScript 中实现 SFTP 功能通常需要借助第三方库,因为浏览器环境不支持直接访问文件系统或建立 SFTP 连接。以下是两种常见方案:
方案 1:使用 Node.js 的 ssh2 库(后端)
ssh2 是一个纯 JavaScript 实现的 SSH2 客户端/服务器库,支持 SFTP。
安装依赖:
npm install ssh2
基础示例代码:
const Client = require('ssh2').Client;
const conn = new Client();
conn.on('ready', () => {
conn.sftp((err, sftp) => {
if (err) throw err;
// 上传文件
sftp.fastPut('./local/file.txt', '/remote/file.txt', (err) => {
if (err) console.error(err);
else console.log('上传成功');
conn.end();
});
// 下载文件
sftp.fastGet('/remote/file.txt', './local/download.txt', (err) => {
if (err) console.error(err);
else console.log('下载成功');
});
});
}).connect({
host: 'sftp.example.com',
port: 22,
username: 'username',
password: 'password' // 或 privateKey: require('fs').readFileSync('/path/to/key')
});
方案 2:浏览器端通过 API 中转
浏览器无法直接建立 SFTP 连接,需通过后端服务中转:
后端接口示例(Node.js + Express):
const express = require('express');
const { Client } = require('ssh2');
const multer = require('multer');
const app = express();
const upload = multer({ dest: 'uploads/' });
app.post('/api/sftp/upload', upload.single('file'), (req, res) => {
const conn = new Client();
conn.on('ready', () => {
conn.sftp((err, sftp) => {
sftp.fastPut(req.file.path, `/remote/${req.file.originalname}`, (err) => {
conn.end();
if (err) res.status(500).send(err.message);
else res.send('上传成功');
});
});
}).connect({
host: process.env.SFTP_HOST,
username: process.env.SFTP_USER,
privateKey: require('fs').readFileSync(process.env.SFTP_KEY_PATH)
});
});
app.listen(3000);
前端调用示例:

async function uploadFile(file) {
const formData = new FormData();
formData.append('file', file);
const response = await fetch('/api/sftp/upload', {
method: 'POST',
body: formData
});
return await response.text();
}
安全注意事项
- 避免在前端存储 SFTP 凭据
- 使用环境变量管理服务器配置
- 实施 HTTPS 加密通信
- 对上传文件进行病毒扫描和类型限制
替代方案
- WebDAV:如果支持 WebDAV 协议,浏览器可直接通过
fetch访问 - SFTP-Web:部分商业解决方案提供基于 Web 的 SFTP 客户端
- FileZilla Server:配置为 HTTPS 文件服务
错误处理建议
conn.on('error', (err) => {
console.error('连接错误:', err);
});
sftp.on('error', (err) => {
console.error('SFTP操作错误:', err);
});






