Skip to content

Tệp trong bộ nhớ ​

Không phải thứ gì bạn gửi đi cũng nằm sẵn trên đĩa. writeFile() và readFile() truyền dữ liệu thẳng giữa bộ nhớ và một tệp trên máy chủ, qua SFTP hay SCP đều được.

Ghi tệp trên máy chủ ​

ts
// Một chuỗi hoặc dữ liệu byte.
await client.writeFile('/etc/motd', 'Welcome to prod\n');
await client.writeFile('/srv/app/config.json', JSON.stringify(config, null, 2), { mode: 0o600 });

// Một stream, cho dữ liệu quá lớn để giữ trong bộ nhớ.
import { createReadStream, statSync } from 'node:fs';

const file = './backup.tar.gz';
await client.writeFile('/srv/backups/latest.tar.gz', createReadStream(file), {
  size: statSync(file).size,
});
Tùy chọnMặc địnhÝ nghĩa
mode0o644Quyền của tệp khi được tạo mới.
sizeĐộ dài của stream, tính bằng byte.
signalHủy thao tác ghi.

Stream qua SCP cần có size

Giao thức SCP phải báo kích thước tệp trước khi gửi dữ liệu. Nếu không có size, node-scp sẽ đọc toàn bộ stream vào bộ nhớ trước. Khi có size, stream phải dài đúng bằng con số đó, trên cả hai giao thức, nếu không thao tác ghi sẽ thất bại.

Đọc tệp trên máy chủ ​

readFile() trả về một Buffer chứa toàn bộ nội dung:

ts
const raw = await client.readFile('/srv/app/config.json');
const config = JSON.parse(raw.toString('utf8'));

Với tệp lớn, hãy dùng download() để ghi xuống đĩa: nó truyền theo stream và báo tiến độ.

Ví dụ: sửa tệp cấu hình trên máy chủ ​

ts
const path = '/etc/config/system';
const current = (await client.readFile(path)).toString();
const updated = current.replace(/option hostname '.*'/, "option hostname 'office-router'");
if (updated !== current) await client.writeFile(path, updated);

Phát hành theo giấy phép MIT.