Overly complicated inheritance for the Uploader classes.

Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.

  • Close this issue

Uploaders

Currently we have determine the location of uploads in the Uploaders using inheritance & overriding methods:

  • GitlabUploader -> system folder
  • AttachmentUploader > GitlabUploader -> model class/mounted_as folder
  • AvatarUploader > GitlabUploader -> model class/mounted_as folder
  • FileUploader > GitlabUploader -> namespace folder
  • PersonalFileUploader > FileUploader, -> system folder

Furthermore in EE:

  • ObjectStoreUploader > CarrierWave::Uploader::Base
  • ArtifactUploader > ObjectStoreUploader
  • LfsObjectUploader > ObjectStoreUploader

Who are using a confusing implementation of .file_storage? & #file_storage?

Maybe it would be better to build these classes using a for each of the upload types UploadToSystemDir, UploadToNamespaceDir, UploadToSharedDir & UploadToObjectStorage?

Controllers

(maybe handle in separate issue - check if possible)

The uploads are handled by 2 controllers (Projects::UploadsController, UploadsController and one more - Groups::UploadsController will probably be introduced by https://gitlab.com/gitlab-org/gitlab-ee/issues/3938 ). All these controllers include UploadsActions concern while Projects and Group are very similar.

@ayufan @jarka

Edited Sep 29, 2025 by 🤖 GitLab Bot 🤖
Assignee Loading
Time tracking Loading