UNPKG

@cliz/transfer

Version:

a simple commandline to transfer file (file transfer)

39 lines (38 loc) 1.45 kB
"use strict"; 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)); }