Process all the uploads with GitLab Workhorse
[GitLab Workhorse](https://gitlab.com/gitlab-org/gitlab-workhorse) has special rules for handling uploads.
To prevent occupying a ruby process on I/O operations, we process the upload in workhorse, where is cheaper.
This process can also directly upload to object storage.
Additional details can be found on our [Uploads development documentation](https://docs.gitlab.com/ee/development/uploads.html).
The problem is that each new feature may need also a workhorse MR to take advantage of this.
Our [NPM package](gitlab-org/gitlab-ee#5934) doesn't have workhorse upload acceleration, and members of the wider community are contributing new features based on that https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/9012#note_179607151 increasing our ~"technical debt"
Part of the complexity of this topic is reflected in https://gitlab.com/groups/gitlab-org/-/epics/483 but this epic has aims to deal with the uploading problem regardless of ~"Object Storage" being configured or not.
The original discussion started on gitlab-org/gitlab-foss#63097
# Current status
In gitlab we support several uploads technologies and upload encodings. Details on the implementations are provided in gitlab-org/gitlab-foss!31290. Here follow a brief table of what we have now
| Feature | technology | encoding | issue |
|------------------------------------------|-----------------------------|-----------|----------------------------|
| git LFS | direct upload | body | |
| CI artifacts | direct upload | multipart | |
| Maven packages | direct upload | body | |
| Uploads | direct upload | multipart | |
| Avatars (user, group, project) | disk buffered upload | multipart | |
| Instance aspect customization | disk buffered upload | multipart | |
| uploads from a browser into a repository | disk buffered upload | multipart | |
| wiki attachments | ~~rails~~ disk buffered upload | multipart | gitlab-org/gitlab#30461 |
| NPM packages | rails | JSON | gitlab-org/gitlab#13078 |
| GraphQL uploads | ~~rails~~ disk buffered upload | multipart | gitlab-org/gitlab#30456 - https://gitlab.com/gitlab-org/gitlab/-/issues/280819 |
| Web IDE | rails | JSON | gitlab-org/gitlab#30462 |
| project import from web interface | ~~disk buffered upload~~ direct upload | multipart | gitlab-org/gitlab#208674 |
| project import from API | ~~rails~~ direct upload | multipart | gitlab-org/gitlab#37256 |
| anything else under `/api` | rails | multipart | gitlab-org/gitlab#14960 |
epic