UNPKG

@cliz/transfer

Version:

a simple commandline to transfer file (file transfer)

62 lines (61 loc) 1.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const net = require("net"); const detectPort = require("detect-port"); exports.default = async (api, filepath, options) => { const _filepath = api.path.abs(filepath); const _filename = api.path.filename(filepath) .replace(/ /g, '\\ '); const stream = api.fs.createReadStream(_filepath); const server = net.createServer(socket => { socket.on('data', chunk => { const message = chunk.toString().replace(/接收/g, '发送'); process.stdout.write(message); }); let size = 0; stream.on('readable', function () { let data; while (data = this.read()) { size += data.length; socket.write(data); } }); stream.on('end', function () { socket.end(); }); socket.on('done', () => { socket.end(); }); socket.on('end', function () { server .close(() => { process.stdout.write(`\r传输完毕(${getFileSize(size).toFixed(2)} MB) \n`); }); }); }); const port = await getAvailablePort(); const ip = await api.network.ip(); server.listen(port, '0.0.0.0', async () => { const command = `${api.pkg.bin} receive ${ip}:${port} ${_filename}`; try { await api.clipboard.copy(command); } catch (error) { } api.logger.success(`Copied: ${command}`); }); }; async function getAvailablePort() { for (let i = 8000; i < 65536; i++) { try { await detectPort(i); return i; } catch (error) { continue; } } } function getFileSize(size) { return (size / (1024 * 1024)); }