Choosing the uploader you need
Versatile, reliable uploading is at the heart of Uppy. It has many configurable plugins to suit your needs. In this guide we will explain the different plugins, their strategies, and when to use them based on use cases.
Use cases
I want worry-free, plug-and-play uploads with Transloadit services
Transloadit’s strength is versatility. By doing video, audio, images, documents,
and more, you only need one vendor for all your file processing
needs. The @uppy/transloadit
plugin directly
uploads to Transloadit so you only have to worry about creating a
template. It uses
Tus under the hood so you don’t have to
sacrifice reliable, resumable uploads for convenience.
You should use @uppy/transloadit
if you don’t want to host your own
server, (optionally) need file processing, and store it in the service (such as
S3 or GCS) of your liking. All with minimal effort.
I want reliable, resumable uploads
Tus is a new open protocol for resumable uploads built on HTTP. This means accidentally closing your tab or losing connection let’s you continue, for instance, your 10GB upload instead of starting all over.
Tus supports any language, any platform, and any network. It requires a client and server integration to work. You can checkout the client and server implementations to find the server in your preferred language. You can store files on the Tus server itself, but you can also use service integrations (such as S3) to store files externally.
If you want reliable, resumable uploads: use @uppy/tus
to connect to your
Tus server in a few lines of code.
I want to upload to AWS S3 (or S3-compatible storage) directly
When you prefer a client-to-storage over a client-to-server-to-storage (such as Transloadit or Tus) setup. This may in some cases be preferable, for instance, to reduce costs or the complexity of running a server and load balancer with Tus.
Uppy has two plugins to make this happen @uppy/aws-s3
and
@uppy/aws-s3-multipart
.
Which one should I pick?
If your users are planning to mostly upload small files and/or a lot of files,
it’s better to use @uppy/aws-s3
.
@uppy/aws-s3-multipart
is valuable for larger files (100 MB+) as it
uploads a single object as a set of parts. This has certain benefits, such as
improved throughput (uploading parts in parallel) and quick recovery from
network issues (only the failed parts need to be retried). The downside is
request overhead, as it needs to do creation, signing, and completion requests
besides the upload requests. For example, if you are uploading files that are
only a couple kilobytes with a 100ms roundtrip latency, you are spending 400ms
on overhead and only a few milliseconds on uploading.
If you are uploading large files (100 MB+), we recommend
@uppy/aws-s3-multipart
, otherwise @uppy/aws-s3
.
You can also save files in S3 with the /s3/store
robot while still
using the powers of Transloadit services.
I want to send regular HTTP uploads to my own server
@uppy/xhr-upload
handles classic HTML multipart form uploads as well as
uploads using the HTTP PUT
method.