@cliz/transfer
Version:
a simple commandline to transfer file (file transfer)
62 lines (61 loc) • 1.88 kB
JavaScript
;
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));
}