From fbd3255540e8a530cc83b4bd408cac1f9db4c3b7 Mon Sep 17 00:00:00 2001 From: vapao Date: Thu, 25 Nov 2021 15:07:46 +0800 Subject: [PATCH] =?UTF-8?q?U=20=E4=BC=98=E5=8C=96=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=99=A8=E8=BF=9B=E5=BA=A6=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spug_api/consumer/consumers.py | 2 +- spug_web/src/pages/ssh/FileManager.js | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/spug_api/consumer/consumers.py b/spug_api/consumer/consumers.py index 4b64211..eca2a4a 100644 --- a/spug_api/consumer/consumers.py +++ b/spug_api/consumer/consumers.py @@ -97,7 +97,7 @@ class SSHConsumer(WebsocketConsumer): def receive(self, text_data=None, bytes_data=None): data = text_data or bytes_data - if data: + if data and self.chan: data = json.loads(data) # print('write: {!r}'.format(data)) resize = data.get('resize') diff --git a/spug_web/src/pages/ssh/FileManager.js b/spug_web/src/pages/ssh/FileManager.js index 169aeab..95baed6 100644 --- a/spug_web/src/pages/ssh/FileManager.js +++ b/spug_web/src/pages/ssh/FileManager.js @@ -125,7 +125,7 @@ class FileManager extends React.Component { formData.append('token', token); formData.append('path', '/' + this.state.pwd.join('/')); this.input.value = ''; - http.post('/api/file/object/', formData, {timeout: 600000}) + http.post('/api/file/object/', formData, {timeout: 600000, onUploadProgress: this._updateLocal}) .then(() => { this.setState({uploadStatus: 'success'}); this.fetchFiles() @@ -134,6 +134,11 @@ class FileManager extends React.Component { } }; + _updateLocal = (e) => { + const percent = e.loaded / e.total * 100 / 2 + this.setState({percent: Number(percent.toFixed(1))}) + } + _updatePercent = token => { const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; this.socket = new WebSocket(`${protocol}//${window.location.host}/api/ws/exec/${token}/?x-token=${X_TOKEN}`); @@ -142,8 +147,8 @@ class FileManager extends React.Component { if (e.data === 'pong') { this.socket.send('ping') } else { - const percent = Number(e.data); - if (percent > this.state.percent) this.setState({percent}); + const percent = this.state.percent + Number(e.data) / 2; + if (percent > this.state.percent) this.setState({percent: Number(percent.toFixed(1))}); if (percent === 100) { this.socket.close() }