From 55c513bf22e7f2026c41fc3d2728dc97fd39591e Mon Sep 17 00:00:00 2001 From: lian Date: Fri, 22 Jan 2021 18:31:53 +0800 Subject: [PATCH] use go fileserver --- .../toolbar/multiple-dir-operation-toolbar.js | 22 +++++++++++++++---- frontend/src/utils/constants.js | 1 + seahub/base/context_processors.py | 3 +++ seahub/templates/base_for_react.html | 1 + 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/toolbar/multiple-dir-operation-toolbar.js b/frontend/src/components/toolbar/multiple-dir-operation-toolbar.js index 83d41beae9..a182a15295 100644 --- a/frontend/src/components/toolbar/multiple-dir-operation-toolbar.js +++ b/frontend/src/components/toolbar/multiple-dir-operation-toolbar.js @@ -1,7 +1,7 @@ import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import { Button, ButtonGroup } from 'reactstrap'; -import { gettext, siteRoot, canGenerateShareLink, isPro, fileAuditEnabled, name } from '../../utils/constants'; +import { gettext, siteRoot, canGenerateShareLink, isPro, fileAuditEnabled, name, fileServerRoot, useGoFileserver } from '../../utils/constants'; import { Utils } from '../../utils/utils'; import { seafileAPI } from '../../utils/seafile-api'; import URLDecorator from '../../utils/url-decorator'; @@ -83,9 +83,23 @@ class MultipleDirOperationToolbar extends React.Component { location.href= url; return; } - this.setState({ - isZipDialogOpen: true - }); + if (!useGoFileserver) { + this.setState({ + isZipDialogOpen: true + }); + } else { + const target = this.props.selectedDirentList.map(dirent => dirent.name); + seafileAPI.zipDownload(repoID, path, target).then((res) => { + const zipToken = res.data['zip_token']; + location.href = `${fileServerRoot}zip/${zipToken}`; + }).catch((error) => { + let errorMsg = Utils.getErrorMsg(error); + this.setState({ + isLoading: false, + errorMsg: errorMsg + }); + }); + } } } diff --git a/frontend/src/utils/constants.js b/frontend/src/utils/constants.js index bd10bb2a49..8e7fe4fc53 100644 --- a/frontend/src/utils/constants.js +++ b/frontend/src/utils/constants.js @@ -14,6 +14,7 @@ export const isPro = window.app.config.isPro === 'True'; export const isDocs = window.app.config.isDocs === 'True'; export const lang = window.app.config.lang; export const fileServerRoot = window.app.config.fileServerRoot; +export const useGoFileserver = window.app.config.useGoFileserver; export const seafileVersion = window.app.config.seafileVersion; export const serviceURL = window.app.config.serviceURL; export const appAvatarURL = window.app.config.avatarURL; diff --git a/seahub/base/context_processors.py b/seahub/base/context_processors.py index c79d589bb5..325c974cfd 100644 --- a/seahub/base/context_processors.py +++ b/seahub/base/context_processors.py @@ -15,6 +15,8 @@ from django.conf import settings as dj_settings from django.utils.functional import lazy from constance import config +import seaserv + from seahub.settings import SEAFILE_VERSION, SITE_TITLE, SITE_NAME, \ MAX_FILE_NAME, LOGO_PATH, BRANDING_CSS, LOGO_WIDTH, LOGO_HEIGHT,\ SHOW_REPO_DOWNLOAD_BUTTON, SITE_ROOT, ENABLE_GUEST_INVITATION, \ @@ -132,6 +134,7 @@ def base(request): 'CSRF_COOKIE_NAME': dj_settings.CSRF_COOKIE_NAME, 'constance_enabled': dj_settings.CONSTANCE_ENABLED, 'FILE_SERVER_ROOT': file_server_root, + 'USE_GO_FILESERVER': seaserv.USE_GO_FILESERVER if hasattr(seaserv, 'USE_GO_FILESERVER') else False, 'LOGIN_URL': dj_settings.LOGIN_URL, 'enable_thumbnail': ENABLE_THUMBNAIL, 'thumbnail_size_for_original': THUMBNAIL_SIZE_FOR_ORIGINAL, diff --git a/seahub/templates/base_for_react.html b/seahub/templates/base_for_react.html index 6d23422558..294040fa32 100644 --- a/seahub/templates/base_for_react.html +++ b/seahub/templates/base_for_react.html @@ -44,6 +44,7 @@ isDocs: '{{ is_docs }}', lang: '{{ LANGUAGE_CODE }}', fileServerRoot: '{{ FILE_SERVER_ROOT }}', + useGoFileserver: {% if USE_GO_FILESERVER %} true {% else %} false {% endif %}, serviceURL: '{{ service_url }}', seafileVersion: '{{ seafile_version }}', avatarURL: '{{ avatar_url }}'