@cliz/transfer
Version:
a simple commandline to transfer file (file transfer)
39 lines (38 loc) • 1.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const net = require("net");
const throttle_1 = require("@zodash/throttle");
exports.default = async (api, uri, filename, options) => {
const filepath = api.path.join(filename);
const [ip, port] = uri.split(':');
const socket = net.connect(+port, ip);
const stream = api.fs.createWriteStream(filepath);
let date = +new Date();
let size = 0;
let elapsed = 0;
const logMessageImmediate = (message) => {
socket.write(message);
process.stdout.write(message);
};
const logMessage = (0, throttle_1.throttle)(logMessageImmediate, 100);
socket.on('error', async () => {
await api.fs.removeFile(filepath);
});
socket.on('end', () => {
const fileSize = getFileSize(size);
const message = `\r传输完毕(大小:${fileSize.toFixed(2)} MB,传输时间:${elapsed / 1000} 秒,速度: ${(fileSize / (elapsed / 1000)).toFixed(2)} MB/s)\n`;
logMessageImmediate(message);
stream.close();
process.exit();
});
socket.on('data', chunk => {
size += chunk.length;
elapsed = +new Date() - date;
const message = `\r已接收:${getFileSize(size).toFixed(2)} MB, 传输时间:${elapsed / 1000} 秒`;
logMessage(message);
stream.write(chunk);
});
};
function getFileSize(size) {
return (size / (1024 * 1024));
}