From 86770c47f9f8c2d7df2bff05179943c0cad59100 Mon Sep 17 00:00:00 2001 From: Ranjiwei <32759763+r350178982@users.noreply.github.com> Date: Thu, 19 Sep 2024 11:12:10 +0800 Subject: [PATCH] add-download-url (#6771) * add-download-url * update unitest * update * update * update * update * Update test_view_lib_file.py * code-optimize * Update shared-dir-view.js * code-optimize --- .../src/components/dialog/image-dialog.js | 4 +-- .../dir-view-mode/dir-column-nav.js | 3 ++- .../dirent-grid-view/dirent-grid-view.js | 3 ++- .../dirent-list-view/dirent-list-view.js | 3 ++- .../src/components/file-content-view/video.js | 7 ++--- .../src/components/file-view/file-toolbar.js | 3 ++- .../shared-file-view/shared-file-view.js | 5 ++-- .../cell-editors/file-name-editor.js | 4 ++- frontend/src/shared-dir-view.js | 3 ++- frontend/src/shared-file-view-video.js | 7 ++--- frontend/src/utils/constants.js | 24 +++++++++++++++++ frontend/src/utils/url-decorator.js | 4 +-- seahub/templates/common_file_view_react.html | 4 ++- seahub/templates/file_view_react.html | 1 - .../templates/markdown_file_view_react.html | 1 + seahub/templates/shared_file_view_react.html | 1 + seahub/templates/text_file_view_react.html | 3 ++- seahub/utils/__init__.py | 4 +-- seahub/views/file.py | 26 +++++++++++++------ tests/seahub/views/file/test_file.py | 7 +---- tests/seahub/views/file/test_view_lib_file.py | 11 +------- .../file/test_view_lib_file_via_smart_link.py | 2 +- 22 files changed, 82 insertions(+), 48 deletions(-) diff --git a/frontend/src/components/dialog/image-dialog.js b/frontend/src/components/dialog/image-dialog.js index 32c990deda..d205688004 100644 --- a/frontend/src/components/dialog/image-dialog.js +++ b/frontend/src/components/dialog/image-dialog.js @@ -17,7 +17,7 @@ const propTypes = { class ImageDialog extends React.Component { downloadImage = (imageSrc) => { - let downloadUrl = imageSrc.indexOf('?dl=1') > -1 ? imageSrc : imageSrc + '?dl=1'; + let downloadUrl = imageSrc; if (document.getElementById('downloadFrame')) { document.body.removeChild(document.getElementById('downloadFrame')); @@ -72,7 +72,7 @@ class ImageDialog extends React.Component { zoomInLabel={gettext('Zoom in')} zoomOutLabel={gettext('Zoom out')} enableRotate={true} - onClickDownload={() => this.downloadImage(imageItems[imageIndex].url)} + onClickDownload={() => this.downloadImage(imageItems[imageIndex].downloadURL)} onClickDelete={this.props.onDeleteImage ? () => this.props.onDeleteImage(imageItems[imageIndex].name) : null} onViewOriginal={this.onViewOriginal} viewOriginalImageLabel={gettext('View original image')} diff --git a/frontend/src/components/dir-view-mode/dir-column-nav.js b/frontend/src/components/dir-view-mode/dir-column-nav.js index d65e19fa50..1b0d28a068 100644 --- a/frontend/src/components/dir-view-mode/dir-column-nav.js +++ b/frontend/src/components/dir-view-mode/dir-column-nav.js @@ -9,7 +9,7 @@ import Move from '../../components/dialog/move-dirent-dialog'; import CreateFolder from '../../components/dialog/create-folder-dialog'; import CreateFile from '../../components/dialog/create-file-dialog'; import ImageDialog from '../../components/dialog/image-dialog'; -import { gettext, siteRoot, thumbnailSizeForOriginal } from '../../utils/constants'; +import { fileServerRoot, gettext, siteRoot, thumbnailSizeForOriginal } from '../../utils/constants'; import { Utils } from '../../utils/utils'; import TextTranslation from '../../utils/text-translation'; import TreeSection from '../../components/tree-section'; @@ -269,6 +269,7 @@ class DirColumnNav extends React.Component { 'src': src, 'thumbnail': `${siteRoot}thumbnail/${repoID}/${thumbnailSizeForOriginal}${path}`, 'node': items.find(item => item.path.split('/').pop() === name), + 'downloadURL': `${fileServerRoot}repos/${repoID}/files/?op=download&p=${path}`, }; }; diff --git a/frontend/src/components/dirent-grid-view/dirent-grid-view.js b/frontend/src/components/dirent-grid-view/dirent-grid-view.js index b4eddf4bad..6e4a42cb4b 100644 --- a/frontend/src/components/dirent-grid-view/dirent-grid-view.js +++ b/frontend/src/components/dirent-grid-view/dirent-grid-view.js @@ -1,6 +1,6 @@ import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; -import { siteRoot, username, enableSeadoc, thumbnailDefaultSize, thumbnailSizeForOriginal, gettext } from '../../utils/constants'; +import { siteRoot, username, enableSeadoc, thumbnailDefaultSize, thumbnailSizeForOriginal, gettext, fileServerRoot } from '../../utils/constants'; import { Utils } from '../../utils/utils'; import { seafileAPI } from '../../utils/seafile-api'; import URLDecorator from '../../utils/url-decorator'; @@ -591,6 +591,7 @@ class DirentGridView extends React.Component { 'url': `${siteRoot}lib/${repoID}/file${path}`, 'thumbnail': `${siteRoot}thumbnail/${repoID}/${thumbnailSizeForOriginal}${path}`, 'src': `${siteRoot}repo/${repoID}/raw${path}?t=${cacheBuster}`, + 'downloadURL': `${fileServerRoot}repos/${repoID}/files/?op=download&p=${path}`, }; }; diff --git a/frontend/src/components/dirent-list-view/dirent-list-view.js b/frontend/src/components/dirent-list-view/dirent-list-view.js index c084a0f429..9e43f9ee6b 100644 --- a/frontend/src/components/dirent-list-view/dirent-list-view.js +++ b/frontend/src/components/dirent-list-view/dirent-list-view.js @@ -1,6 +1,6 @@ import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; -import { siteRoot, gettext, username, enableSeadoc, thumbnailSizeForOriginal } from '../../utils/constants'; +import { siteRoot, gettext, username, enableSeadoc, thumbnailSizeForOriginal, fileServerRoot } from '../../utils/constants'; import { Utils } from '../../utils/utils'; import TextTranslation from '../../utils/text-translation'; import URLDecorator from '../../utils/url-decorator'; @@ -189,6 +189,7 @@ class DirentListView extends React.Component { 'url': `${siteRoot}lib/${repoID}/file${path}`, 'thumbnail': `${siteRoot}thumbnail/${repoID}/${thumbnailSizeForOriginal}${path}`, 'src': `${siteRoot}repo/${repoID}/raw${path}`, + 'downloadURL': `${fileServerRoot}repos/${repoID}/files/?op=download&p=${path}`, }; }; diff --git a/frontend/src/components/file-content-view/video.js b/frontend/src/components/file-content-view/video.js index ae27a907f9..d9ee57c5df 100644 --- a/frontend/src/components/file-content-view/video.js +++ b/frontend/src/components/file-content-view/video.js @@ -1,10 +1,10 @@ import React from 'react'; import VideoPlayer from '../video-player'; - +import { MimetypesKind } from '../../utils/constants'; import '../../css/video-file-view.css'; const { - rawPath + rawPath, fileExt } = window.app.pageOptions; class FileContent extends React.Component { @@ -15,7 +15,8 @@ class FileContent extends React.Component { preload: 'auto', playbackRates: [0.5, 1, 1.5, 2], sources: [{ - src: rawPath + src: rawPath, + type: MimetypesKind[fileExt] || 'video/mp4' }] }; return ( diff --git a/frontend/src/components/file-view/file-toolbar.js b/frontend/src/components/file-view/file-toolbar.js index 6f9eb66317..98d9f1bbff 100644 --- a/frontend/src/components/file-view/file-toolbar.js +++ b/frontend/src/components/file-view/file-toolbar.js @@ -28,6 +28,7 @@ const { canEditFile, err, // fileEnc, // for 'edit', not undefined only for some kinds of files (e.g. text file) canDownloadFile, + fileDownloadURL, } = window.app.pageOptions; class FileToolbar extends React.Component { @@ -162,7 +163,7 @@ class FileToolbar extends React.Component { id="download-file" icon="download" text={gettext('Download')} - href="?dl=1" + href={fileDownloadURL} /> )} }{' '} {(canDownload && !trafficOverLimit) && - {gettext('Download')} ({Utils.bytesToSize(fileSize)}) + + {gettext('Download')} ({Utils.bytesToSize(fileSize)}) }{' '} {(enableShareLinkReportAbuse && (loginUser !== sharedBy)) &&