Amazon S3 console: download multiple files at once

Amazon S3Web Console

Amazon S3 Problem Overview


When I log to my S3 console I am unable to download multiple selected files (the WebUI allows downloads only when one file is selected):

https://console.aws.amazon.com/s3

Is this something that can be changed in the user policy or is it a limitation of Amazon?

Amazon S3 Solutions


Solution 1 - Amazon S3

It is not possible through the AWS Console web user interface. But it's a very simple task if you install AWS CLI. You can check the installation and configuration steps on Installing in the AWS Command Line Interface

After that you go to the command line:

aws s3 cp --recursive s3://<bucket>/<folder> <local_folder> 

This will copy all the files from given S3 path to your given local path.

Solution 2 - Amazon S3

Selecting a bunch of files and clicking Actions->Open opened each in a browser tab, and they immediately started to download (6 at a time).

Screenshot

Solution 3 - Amazon S3

If you use AWS CLI, you can use the exclude along with --include and --recursive flags to accomplish this

aws s3 cp s3://path/to/bucket/ . --recursive --exclude "*" --include "things_you_want"

Eg.

--exclude "*" --include "*.txt"

will download all files with .txt extension. More details - https://docs.aws.amazon.com/cli/latest/reference/s3/

Solution 4 - Amazon S3

I believe it is a limitation of the AWS console web interface, having tried (and failed) to do this myself.

Alternatively, perhaps use a 3rd party S3 browser client such as http://s3browser.com/

Solution 5 - Amazon S3

If you have Visual Studio with the AWS Explorer extension installed, you can also browse to Amazon S3 (step 1), select your bucket (step 2), select al the files you want to download (step 3) and right click to download them all (step 4).

enter image description here

Solution 6 - Amazon S3

The S3 service has no meaningful limits on simultaneous downloads (easily several hundred downloads at a time are possible) and there is no policy setting related to this... but the S3 console only allows you to select one file for downloading at a time.

Once the download starts, you can start another and another, as many as your browser will let you attempt simultaneously.

Solution 7 - Amazon S3

Using AWS CLI, I ran all the downloads in the background using "&" and then waited on all the pids to complete. It was amazingly fast. Apparently the "aws s3 cp" knows to limit the number of concurrent connections because it only ran 100 at a time.

aws --profile $awsProfile s3 cp "$s3path" "$tofile" &
pids[${npids}]=$! ## save the spawned pid
let "npids=npids+1"

followed by

echo "waiting on $npids downloads"
for pid in ${pids[*]}; do
    echo $pid
    wait $pid
done

I downloaded 1500+ files (72,000 bytes) in about a minute

Solution 8 - Amazon S3

I wrote a simple shell script to download NOT JUST all files but also all versions of every file from a specific folder under AWS s3 bucket. Here it is & you may find it useful

# Script generates the version info file for all the 
# content under a particular bucket and then parses 
# the file to grab the versionId for each of the versions
# and finally generates a fully qualified http url for
# the different versioned files and use that to download 
# the content.

s3region="s3.ap-south-1.amazonaws.com"
bucket="your_bucket_name"
# note the location has no forward slash at beginning or at end
location="data/that/you/want/to/download"
# file names were like ABB-quarterly-results.csv, AVANTIFEED--quarterly-results.csv
fileNamePattern="-quarterly-results.csv"

# AWS CLI command to get version info
content="$(aws s3api list-object-versions --bucket $bucket --prefix "$location/")"
#save the file locally, if you want
echo "$content" >> version-info.json
versions=$(echo "$content" | grep -ir VersionId  | awk -F ":" '{gsub(/"/, "", $3);gsub(/,/, "", $3);gsub(/ /, "", $3);print $3 }')
for version in $versions
do
    echo ############### $fileId ###################
    #echo $version
    url="https://$s3region/$bucket/$location/$fileId$fileNamePattern?versionId=$version"
    echo $url
    content="$(curl -s "$url")"
    echo "$content" >> $fileId$fileNamePattern-$version.csv
    echo ############### $i ###################
done

Solution 9 - Amazon S3

In case someone is still looking for an S3 browser and downloader I have just tried Fillezilla Pro (it's a paid version). It worked great.

I created a connection to S3 with Access key and secret key set up via IAM. Connection was instant and downloading of all folders and files was fast.

Solution 10 - Amazon S3

Also you could use the --include "filename" many times in a single command with each time including a different filename within the double quotes, e.g.

aws s3 mycommand --include "file1" --include "file2"

It will save your time rather than repeating the command to download one file at a time.

Solution 11 - Amazon S3

Also if you are running Windows(tm), WinSCP now allows drag and drop of a selection of multiple files. Including sub-folders.

Many enterprise workstations will have WinSCP installed for editing files on servers by means of SSH.

I am not affiliated, I simply think this was really worth doing.

Solution 12 - Amazon S3

In my case Aur's didn't work and if you're looking for a quick solution to download all files in a folder just using the browser, you can try entering this snippet in your dev console:

(function() {
    const rows = Array.from(document.querySelectorAll('.fix-width-table tbody tr'));
    const downloadButton = document.querySelector('[data-e2e-id="button-download"]');
    const timeBetweenClicks = 500;
    
    function downloadFiles(remaining) {
        if (!remaining.length) {
            return
        }
        
        const row = remaining[0];
        row.click();
        downloadButton.click();
        
        setTimeout(() => {
            downloadFiles(remaining.slice(1));
        }, timeBetweenClicks)
    }

    downloadFiles(rows)
}())

Solution 13 - Amazon S3

I have done, by creating shell script using aws cli (i.e : example.sh)

#!/bin/bash
aws s3 cp s3://s3-bucket-path/example1.pdf LocalPath/Download/example1.pdf
aws s3 cp s3://s3-bucket-path/example2.pdf LocalPath/Download/example2.pdf

give executable rights to example.sh (i.e sudo chmod 777 example.sh)

then run your shell script ./example.sh

Solution 14 - Amazon S3

I think simplest way to download or upload files is to use aws s3 sync command. You can also use it to sync two s3 buckets in same time.

aws s3 sync <LocalPath> <S3Uri> or <S3Uri> <LocalPath> or <S3Uri> <S3Uri>

# Download file(s)
aws s3 sync s3://<bucket_name>/<file_or_directory_path> .

# Upload file(s)
aws s3 sync . s3://<bucket_name>/<file_or_directory_path>

# Sync two buckets
aws s3 sync s3://<1st_s3_path> s3://<2nd_s3_path>

Solution 15 - Amazon S3

What I usually do is mount the s3 bucket (with s3fs) in a linux machine and zip the files I need into one, then I just download that file from any pc/browser.

# mount bucket in file system
/usr/bin/s3fs s3-bucket -o use_cache=/tmp -o allow_other -o uid=1000 -o mp_umask=002 -o multireq_max=5 /mnt/local-s3-bucket-mount

# zip files into one
cd /mnt/local-s3-bucket-mount
zip all-processed-files.zip *.jpg

Solution 16 - Amazon S3

import os
import boto3
import json

s3 = boto3.resource('s3', aws_access_key_id="AKIAxxxxxxxxxxxxJWB",
                    aws_secret_access_key="LV0+vsaxxxxxxxxxxxxxxxxxxxxxry0/LjxZkN")
my_bucket = s3.Bucket('s3testing')

# download file into current directory
for s3_object in my_bucket.objects.all():
    # Need to split s3_object.key into path and file name, else it will give error file not found.
    path, filename = os.path.split(s3_object.key)
    my_bucket.download_file(s3_object.key, filename)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionmm24View Question on Stackoverflow
Solution 1 - Amazon S3Saurabh GuptaView Answer on Stackoverflow
Solution 2 - Amazon S3Aur SarafView Answer on Stackoverflow
Solution 3 - Amazon S3Aniket ThakurView Answer on Stackoverflow
Solution 4 - Amazon S3Simon BView Answer on Stackoverflow
Solution 5 - Amazon S3Iván SainzView Answer on Stackoverflow
Solution 6 - Amazon S3Michael - sqlbotView Answer on Stackoverflow
Solution 7 - Amazon S3Agile FrontiersView Answer on Stackoverflow
Solution 8 - Amazon S3Satyajit PaulView Answer on Stackoverflow
Solution 9 - Amazon S3JervisbayView Answer on Stackoverflow
Solution 10 - Amazon S3vaibhav padmakar munjoleView Answer on Stackoverflow
Solution 11 - Amazon S3mckenzmView Answer on Stackoverflow
Solution 12 - Amazon S3okcokerView Answer on Stackoverflow
Solution 13 - Amazon S3Yash VekariaView Answer on Stackoverflow
Solution 14 - Amazon S3AkifView Answer on Stackoverflow
Solution 15 - Amazon S3gabriel capparelliView Answer on Stackoverflow
Solution 16 - Amazon S3Ankit Kumar RajpootView Answer on Stackoverflow