Завантажте папку з підпапками за допомогою S3 та консолі AWS


77

Коли я намагаюся завантажити папку з підпапками в S3 через консоль AWS, завантажуються лише файли, а не підпапки.

Ви також не можете вибрати папку. Завжди потрібно спочатку відкрити папку, перш ніж ви зможете щось вибрати.

Чи можливо це взагалі?

Відповіді:


55

Вам не потрібен Enhanced Uploader (який, на мою думку, вже не існує) або будь-яке стороннє програмне забезпечення (яке завжди має ризик того, що хтось викраде ваші приватні дані або ключі доступу з сегмента S3 або навіть з усіх ресурсів AWS).

Оскільки новий менеджер веб-завантаження AWS S3 підтримує перетягування файлів і папок , просто увійдіть на https://console.aws.amazon.com/s3/home і починайте процес завантаження, як зазвичай, а потім просто перетягніть папку з вашого робочий стіл безпосередньо на сторінку S3.


3
Перетягування не працює для мене - Win8.1 / FireFox 41.0.2. Не впевнений, чи має "..запустити процес завантаження як зазвичай" якесь значення, яке мені не очевидно ..: - /
ScottWelker

2
О! Чекай! Працює з Chrome 46.n - після того, як я "почну процес завантаження". Дякуємо за пораду!
ScottWelker

1
У моїй папці 20000 файлів, і завантаження не працює, коли я вибираю всі файли, як за допомогою перетягування, так і за допомогою "клацніть для завантаження". Він працює лише з меншим підмножиною зображень (наприклад, кілька сотень або тисяч у кращому випадку).
Kristada673

Це працює для невеликих файлів і папок, але після певного розміру браузер / інтерфейс вийде з ладу, тому вам краще використовувати рішення @Asad s нижче
contool

@contool Лол, чому браузер не працює? Він розбиває великі файли на пакети і надсилає їх малими порціями. Він ніколи не завантажує весь файл у пам'ять. Я завантажую кілька гігабайт щотижня вже 6 років, жодного разу не зірвався, навіть жодного разу. І питання стосувалося консолі AWS у браузері, а не CLI, як відповідь Асада.
Kainax

128

Я пропоную вам використовувати AWS CLI. Оскільки за допомогою командного рядка та awscli дуже просто

    aws s3 cp SOURCE_DIR s3://DEST_BUCKET/ --recursive

або ви можете використовувати синхронізацію до

    aws s3 sync SOURCE_DIR s3://DEST_BUCKET/

Пам'ятайте, що вам потрібно встановити aws cli і налаштувати його за допомогою ідентифікатора ключа доступу та секретного ідентифікатора ключа доступу

     pip install --upgrade --user awscli   
     aws configure

4
Питання конкретно задає питання, як це зробити за допомогою консолі.
Тім Готьє,

8
Це вводить в оману залежно від того, чи хоче користувач скопіювати саму локальну папку в s3, або лише вміст цієї папки. aws s3 cp SOURCE_DIR s3://DEST_BUCKET/ --recursiveне призведе до створення s3://DEST_BUCKET/SOURCE_DIR, але автоматичне створення цієї віддаленої папки передбачається у більшості випадків.
ely,

Я погоджуюсь з @ely, але я не впевнений, який правильний спосіб створити s3://DEST_BUCKET/SOURCE_DIRяк частину команди aws s3 cp. Я просто зробив вручну папку на відрі s3 з тим самим іменем і рекурсивно скопіював туди.
piedpiper

39

Консоль Amazon S3 тепер підтримує завантаження цілих ієрархій папок. Увімкніть розширений завантажувач у діалоговому вікні Завантаження, а потім додайте одну або кілька папок у чергу завантаження.

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


1
не уявляв про розширений завантажувач, дякую, що згадали!
JimmyPena

6
Ця відповідь зараз застаріла. Відповідь @ Kainax оновлюється.
Пітер Боєр

32

Зазвичай я використовую Enhanced Uploader, доступний через консоль керування AWS. Однак, оскільки для цього потрібна Java, це може спричинити проблеми. Я знайшов s3cmd як чудову заміну командного рядка. Ось як я ним користувався:

s3cmd --configure   # enter access keys, enable HTTPS, etc.
s3cmd sync <path-to-folder> s3://<path-to-s3-bucket>/

5

У мене були проблеми з пошуком розширеного інструмента завантаження для завантаження папки та підпапок всередині неї в S3. Але замість того, щоб знайти інструмент, я міг завантажувати папки разом із підпапками всередині нього, просто перетягуючи та скидаючи їх у відро S3.

Примітка. Ця функція перетягування не працює в Safari . Я протестував його в Chrome, і він чудово працює.

Перетягнути і кинути

Після перетягування файлів і папок, нарешті, відкриється цей екран для завантаження вмісту.

введіть тут опис зображення


1
Я дав цю відповідь у червні 2015 року :)
Kainax

1
Так, ваша відповідь чудова. Однак це не спрацювало, коли я був у Safari. Мені довелося змусити це працювати за допомогою Google Chrome. Отже, я думав, що іншим розробникам було б простіше негайно отримати допомогу, якби я загальний процес зобразив. Сподіваюся, ви зрозуміли.
Reaz Murshed

2

Виконайте щось подібне до наступної команди:

aws s3 cp local_folder_name s3://s3_bucket_name/local_folder_name/ --recursive

1

Рішення 1:

var AWS = require('aws-sdk');
var path = require("path");
var fs = require('fs');

const uploadDir = function(s3Path, bucketName) {

    let s3 = new AWS.S3({
    accessKeyId: process.env.S3_ACCESS_KEY,
    secretAccessKey: process.env.S3_SECRET_KEY
    });

    function walkSync(currentDirPath, callback) {
        fs.readdirSync(currentDirPath).forEach(function (name) {
            var filePath = path.join(currentDirPath, name);
            var stat = fs.statSync(filePath);
            if (stat.isFile()) {
                callback(filePath, stat);
            } else if (stat.isDirectory()) {
                walkSync(filePath, callback);
            }
        });
    }

    walkSync(s3Path, function(filePath, stat) {
        let bucketPath = filePath.substring(s3Path.length+1);
        let params = {Bucket: bucketName, Key: bucketPath, Body: fs.readFileSync(filePath) };
        s3.putObject(params, function(err, data) {
            if (err) {
                console.log(err)
            } else {
                console.log('Successfully uploaded '+ bucketPath +' to ' + bucketName);
            }
        });

    });
};
uploadDir("path to your folder", "your bucket name");

Рішення 2:

aws s3 cp SOURCE_DIR s3://DEST_BUCKET/ --recursive


0

Варто згадати, що якщо ви просто використовуєте S3 для резервного копіювання, вам просто потрібно заархівувати папку, а потім завантажити її. Це заощадить ваш час та витрати на завантаження.

Якщо ви не впевнені, як зробити ефективне архівування з терміналу, подивіться тут на OSX.

І $ zip -r archive_name.zip folder_to_compressдля Windows. Або ж клієнта, такого як 7-Zip, було б достатньо для користувачів Windows


0

Я не бачу тут відповідей на Python. Ви можете завантажити папку сценаріїв за допомогою Python / boto3. Ось як рекурсивно отримати всі імена файлів з дерева каталогів:

def recursive_glob(treeroot, extention):
    results = [os.path.join(dirpath, f)
        for dirpath, dirnames, files in os.walk(treeroot)
        for f in files if f.endswith(extention)]
    return results

Ось як завантажити файл на S3 за допомогою Python / boto:

k = Key(bucket)
k.key = s3_key_name
k.set_contents_from_file(file_handle, cb=progress, num_cb=20, reduced_redundancy=use_rr )

Я використав ці ідеї для написання Directory-Uploader-For-S3


0

Я опинився тут, намагаючись зрозуміти це. З версією, яка зараз є там, ви можете перетягнути туди папку, і вона працює, хоча це не дозволяє вам вибрати папку під час відкриття діалогу завантаження.




0

Ви можете завантажувати файли, перетягуючи їх або вказуючи та клацаючи. Щоб завантажити папки, потрібно перетягнути їх. Функція перетягування підтримується лише для браузерів Chrome і Firefox



-2

Ви не можете завантажувати такі вкладені структури через Інтернет-інструмент. Я рекомендую використовувати щось на зразок Bucket Explorer для більш складних завантажень.


CloudBerry Explorer є безкоштовним - див. Вище
cloudberryman

Спробуйте інший браузер. Я вважаю, що він працює з Chrome 46.n, але не FireFox 41.0.2.
ScottWelker
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.