From 4bf5fa39ff75c0f1213356598232dd748743b1cc Mon Sep 17 00:00:00 2001 From: Ian Scott Date: Fri, 14 Mar 2025 14:14:35 -0400 Subject: [PATCH] fix(upload-form; file-uploads): More UI improvements to file upload widget; reduced timeout numbers to something saner --- .../file_uploader_components/FileUploader.js | 19 +++++++++++++++ .../FileUploaderArea.js | 24 +++++++++++++++---- docker/nginx_local/conf.d/default.conf | 3 +++ docker/nginx_production/conf.d/default.conf | 8 +++---- docker/uwsgi/uwsgi_rest.ini | 12 +++++----- invenio.cfg | 5 ++++ 6 files changed, 55 insertions(+), 16 deletions(-) diff --git a/assets/js/invenio_app_rdm/overridableRegistry/fields/file_uploader_components/FileUploader.js b/assets/js/invenio_app_rdm/overridableRegistry/fields/file_uploader_components/FileUploader.js index deaf78513..cfcfe4d04 100644 --- a/assets/js/invenio_app_rdm/overridableRegistry/fields/file_uploader_components/FileUploader.js +++ b/assets/js/invenio_app_rdm/overridableRegistry/fields/file_uploader_components/FileUploader.js @@ -53,6 +53,8 @@ export const FileUploaderComponent = ({ importButtonText, isFileImportInProgress, decimalSizeDisplay, + helpText, + description, ...uiProps }) => { // We extract the working copy of the draft stored as `values` in formik @@ -195,6 +197,8 @@ export const FileUploaderComponent = ({ dropzoneParams={dropzoneParams} warningMsg={warningMsg} setWarningMsg={setWarningMsg} + helpText={helpText} + description={description} {...uiProps} > <> @@ -206,6 +210,13 @@ export const FileUploaderComponent = ({ {label} + + {description && description !== " " && ( +
+ {i18next.t(description)} +
+ )} + + {displayImportBtn && ( @@ -334,7 +346,14 @@ export const FileUploaderComponent = ({ )} + + + {helpText && helpText !== " " && ( +
+ {i18next.t(helpText)} +
+ )}
( @@ -68,6 +70,12 @@ const FileTableRow = ({ const [isCancelling, setIsCancelling] = useState(false); const [isDeleting, setIsDeleting] = useState(false); const isDefaultPreview = defaultPreview === file.name; + const fileExtension = file.name.split('.').pop().toLowerCase(); + console.log("file", file); + console.log("fileExtension", fileExtension); + const isSupportedFile = Object.values(supportedExtensions).some( + extensions => extensions.includes(fileExtension) + ); // This is a workaround to prevent the pending label from flashing as "failed" // when a new row first appears. @@ -75,7 +83,7 @@ const FileTableRow = ({ useEffect(() => { const timer = setTimeout(() => { setShowPendingLabel(true); - }, 1000); + }, 3000); return () => clearTimeout(timer); }, []); @@ -98,7 +106,7 @@ const FileTableRow = ({ return ( - + {/* TODO: Investigate if react-deposit-forms optimized Checkbox field would be more performant */} setDefaultPreview(isDefaultPreview ? "" : file.name)} /> - +
{file.uploadState.isPending ? ( file.name @@ -122,8 +130,8 @@ const FileTableRow = ({ )}
{file.checksum && ( -
- {file.checksum}{" "} +
+ {file.checksum}{" "}
)} + {!isSupportedFile && ( + {i18next.t("File type not supported for previews.")}}/>)} + /> + )}
diff --git a/docker/nginx_local/conf.d/default.conf b/docker/nginx_local/conf.d/default.conf index 415d6b332..11f583add 100644 --- a/docker/nginx_local/conf.d/default.conf +++ b/docker/nginx_local/conf.d/default.conf @@ -110,6 +110,9 @@ server { include uwsgi_params; uwsgi_buffering off; uwsgi_request_buffering off; + uwsgi_read_timeout 180s; + uwsgi_send_timeout 180s; + uwsgi_connect_timeout 180s; uwsgi_param Host $host; uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for; uwsgi_param X-Forwarded-Proto $scheme; diff --git a/docker/nginx_production/conf.d/default.conf b/docker/nginx_production/conf.d/default.conf index 7a7929de2..6222baf6c 100644 --- a/docker/nginx_production/conf.d/default.conf +++ b/docker/nginx_production/conf.d/default.conf @@ -74,7 +74,6 @@ server { include uwsgi_params; uwsgi_buffering off; uwsgi_request_buffering off; - # Max upload size (except for files) is set to 100mb as default. client_max_body_size 100m; } @@ -84,7 +83,6 @@ server { include uwsgi_params; uwsgi_buffering off; uwsgi_request_buffering off; - # Max upload size (except for files) is set to 100mb as default. client_max_body_size 100m; } @@ -98,9 +96,9 @@ server { include uwsgi_params; uwsgi_buffering off; uwsgi_request_buffering off; - uwsgi_read_timeout 900s; - uwsgi_send_timeout 900s; - uwsgi_connect_timeout 900s; + uwsgi_read_timeout 180s; + uwsgi_send_timeout 180s; + uwsgi_connect_timeout 180s; # Max upload size for files is set to 50GB (configure as needed). client_max_body_size 500G; diff --git a/docker/uwsgi/uwsgi_rest.ini b/docker/uwsgi/uwsgi_rest.ini index 74dc6835a..d8436ec51 100644 --- a/docker/uwsgi/uwsgi_rest.ini +++ b/docker/uwsgi/uwsgi_rest.ini @@ -12,9 +12,9 @@ wsgi-disable-file-wrapper = true single-interpreter = true buffer-size = 65535 pidfile = /tmp/uwsgi_rest.pid -socket-timeout = 900 -so-write-timeout = 900 -socket-write-timeout = 900 -so-send-timeout = 900 -socket-send-timeout = 900 -harakiri = 900 \ No newline at end of file +socket-timeout = 180 +so-write-timeout = 180 +socket-write-timeout = 180 +so-send-timeout = 180 +socket-send-timeout = 180 +harakiri = 180 \ No newline at end of file diff --git a/invenio.cfg b/invenio.cfg index c3a183efc..abe69cb7d 100644 --- a/invenio.cfg +++ b/invenio.cfg @@ -2118,6 +2118,11 @@ INVENIO_MODULAR_DEPOSIT_FORM_COMMON_FIELDS = [ "label": "Upload Files", "component": "FilesUploadComponent", "wrapped": True, + "description": ( + "Very large files (200MB and larger) should be uploaded " + "one at a time. Multiple smaller files may safely be " + "uploaded at once." + ), }, # { # "section": "metadata_only",