How can the frontend effectively handle file upload/download when it uses a BFF?

Anurag Jain
2 min readJan 18, 2023


Approaches to Upload File

1)Upload via Backend Service:

This approach involves passing the file from the frontend, through a BFF, to a backend service, and ultimately storing it in a storage provider.

When uploading large files, such as a 1 GB file, it’s important to consider the memory limitations of the server and potentially implement chunked file uploads in the BFF and backend to reduce memory usage and make the process more manageable.

2)Signed URL:

This approach involves fetching a signed URL from the service and uploading the file directly to the storage provider via the frontend.

This approach is more scalable as it reduces the load on the backend service. However, it requires additional work to maintain the upload status and handle cases such as failed or incomplete uploads.

Approaches to Download Files

Approaches to Download files:

1)Backend Service Serve File:

This approach involves the frontend making a request to the BFF to download a file, which then passes the request on to the backend service. The backend service then fetches the file from storage, loads it into memory, and returns it to the frontend via the BFF.

This approach is suitable for smaller files and when you want to serve the files only to authenticated users.

2)Signed URL:

This approach involves the backend generating a signed URL for a specific file, which is then returned to the frontend. The frontend can then use this URL to download the file directly from the storage provider.

This approach is suitable for downloading a single file at a time, but may not be efficient when downloading multiple files.

3)Public Bucket or Object:

This approach involves making a bucket or object in the storage provider publicly accessible. The backend service simply returns the URL of the file, allowing the frontend to download the file directly from the storage provider.

This approach is only suitable when authentication is not required for the file.

Suggest any other approach you have?