Laden Sie Ordner mit Unterordnern mit S3 und der AWS-Konsole hoch

76

Wenn ich versuche, einen Ordner mit Unterordnern über die AWS-Konsole in S3 hochzuladen, werden nur die Dateien hochgeladen, nicht die Unterordner.

Sie können auch keinen Ordner auswählen. Es ist immer erforderlich, zuerst den Ordner zu öffnen, bevor Sie etwas auswählen können.

Ist das überhaupt möglich?

Chrismarx
quelle

Antworten:

55

Sie benötigen keinen Enhanced Uploader (von dem ich glaube, dass er nicht mehr existiert) oder Software von Drittanbietern (es besteht immer das Risiko, dass jemand Ihre privaten Daten oder Zugriffsschlüssel aus dem S3-Bucket oder sogar aus allen AWS-Ressourcen stiehlt).

Da der neue AWS S3-Web-Upload-Manager Drag'n'Drop für Dateien und Ordner unterstützt, melden Sie sich einfach bei https://console.aws.amazon.com/s3/home an und starten Sie den Upload-Vorgang wie gewohnt. Ziehen Sie dann einfach den Ordner aus Ihrem Ordner Desktop direkt zur S3-Seite.

Kainax
quelle
3
Drag 'n' Drop funktioniert bei mir nicht - Win8.1 / FireFox 41.0.2. Ich bin mir nicht sicher, ob ".. den Upload-Vorgang wie gewohnt starten" eine Bedeutung hat, die mir nicht klar ist ..: - /
ScottWelker
2
Oh! Warten! Funktioniert mit Chrome 46.n - nachdem ich "den Upload-Vorgang gestartet" habe. Danke für den Tipp!
ScottWelker
1
Ich habe 20000 Dateien in meinem Ordner und der Upload funktioniert nicht, wenn ich alle Dateien auswähle, sowohl per Drag & Drop als auch per "Klick zum Hochladen". Es funktioniert nur mit einer kleineren Teilmenge von Bildern (wie bestenfalls ein paar hundert oder tausend).
Kristada673
Dies funktioniert für kleine Dateien und Ordner, aber nach einer bestimmten Größe stürzt der Browser / die Benutzeroberfläche ab, sodass Sie die unten stehende
@
@contool Lol, warum sollte der Browser abstürzen? Es teilt große Dateien auf Pakete auf und sendet sie in kleinen Portionen. Es wird nie die gesamte Datei in den Speicher geladen. Ich lade seit 6 Jahren wöchentlich mehrere Gigabyte hoch, bin nie abgestürzt, nicht einmal. Und die Frage betraf die AWS-Konsole in einem Browser, nicht CLI als Antwort von Asad.
Kainax
124

Ich empfehle Ihnen, AWS CLI zu verwenden. Da ist es sehr einfach mit Kommandozeile und awscli

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

oder Sie können die Synchronisierung mit verwenden

    aws s3 sync SOURCE_DIR s3://DEST_BUCKET/

Denken Sie daran, dass Sie aws cli installieren und mithilfe Ihrer Zugriffsschlüssel-ID und der korrekten Zugriffsschlüssel-ID konfigurieren müssen

     pip install --upgrade --user awscli   
     aws configure
Asad
quelle
4
In der Frage wird speziell gefragt, wie dies mit der Konsole gemacht werden soll.
Tim Gautier
8
Dies ist irreführend, wenn der Benutzer den lokalen Ordner selbst nach s3 oder nur den Inhalt dieses Ordners kopieren möchte. aws s3 cp SOURCE_DIR s3://DEST_BUCKET/ --recursiveführt nicht zur Erstellung von s3://DEST_BUCKET/SOURCE_DIR, aber die automatische Erstellung dieses Remote-Ordners ist die meiste Zeit das beabsichtigte Verhalten.
Ely
Ich stimme @ely zu, bin mir aber nicht sicher, wie ich es s3://DEST_BUCKET/SOURCE_DIRals Teil des Befehls aws s3 cp richtig erstellen soll . Ich habe gerade manuell einen Ordner auf dem s3-Bucket mit dem gleichen Namen erstellt und rekursiv in diesen kopiert.
Piedpiper
39

Die Amazon S3-Konsole unterstützt jetzt das Hochladen ganzer Ordnerhierarchien. Aktivieren Sie den erweiterten Uploader im Dialogfeld "Hochladen" und fügen Sie der Upload-Warteschlange einen oder mehrere Ordner hinzu.

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

Dan Winn
quelle
1
Ich hatte keine Ahnung von dem erweiterten Uploader, danke, dass du ihn erwähnt hast!
JimmyPena
6
Diese Antwort ist jetzt veraltet. Die Antwort von @ Kainax ist jedoch aktuell.
Peter Boyer
32

Normalerweise verwende ich den erweiterten Uploader , der über die AWS-Verwaltungskonsole verfügbar ist. Da dies jedoch Java erfordert, kann dies zu Problemen führen. Ich fand, dass s3cmd ein großartiger Befehlszeilenersatz ist. So habe ich es benutzt:

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

Ich hatte Probleme, das erweiterte Uploader-Tool zum Hochladen von Ordnern und Unterordnern in S3 zu finden. Aber anstatt ein Tool zu finden, könnte ich die Ordner zusammen mit den darin enthaltenen Unterordnern hochladen, indem ich sie einfach in den S3-Bucket ziehe und dort ablege.

Hinweis: Diese Drag & Drop-Funktion funktioniert in Safari nicht . Ich habe es in Chrome getestet und es funktioniert einwandfrei.

Drag & Drop

Nachdem Sie die Dateien und Ordner per Drag & Drop verschoben haben, wird dieser Bildschirm geöffnet, um den Inhalt hochzuladen.

Geben Sie hier die Bildbeschreibung ein

Reaz Murshed
quelle
1
Ich gab diese Antwort im Juni 2015 :)
Kainax
1
Ja, deine Antwort ist in Ordnung. Es hat jedoch nicht funktioniert, als ich in Safari war. Ich musste dafür sorgen, dass es mit Google Chrome funktioniert. Daher dachte ich, es wäre für andere Entwickler einfacher, sofort Hilfe zu erhalten, wenn ich den gesamten Prozess mit Bildern versetze. Ich hoffe du verstehst.
Reaz Murshed
1

Lösung 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");

Lösung 2:

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

Muhammad Numan
quelle
0

Es ist erwähnenswert, dass Sie, wenn Sie S3 einfach für Backups verwenden, den Ordner einfach komprimieren und dann hochladen sollten. Dies spart Ihnen Zeit und Kosten beim Hochladen.

Wenn Sie sich nicht sicher sind, wie Sie effizient vom Terminal aus komprimieren können, suchen Sie hier nach OSX.

Und $ zip -r archive_name.zip folder_to_compressfür Windows. Alternativ würde ein Client wie 7-Zip für Windows-Benutzer ausreichen

SGouws
quelle
0

Ich sehe hier keine Python-Antworten. Sie können das Hochladen von Skriptordnern mit Python / boto3 durchführen. So rufen Sie rekursiv alle Dateinamen aus dem Verzeichnisbaum ab:

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

So laden Sie eine Datei mit Python / boto in S3 hoch:

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

Ich habe diese Ideen verwendet, um Directory-Uploader-For-S3 zu schreiben

olekb
quelle
0

Ich bin hier gelandet, als ich versucht habe, das herauszufinden. Mit der Version, die derzeit verfügbar ist, können Sie einen Ordner per Drag & Drop in den Ordner ziehen, und es funktioniert, obwohl Sie beim Öffnen des Upload-Dialogs keinen Ordner auswählen können.

ConorLuddy
quelle
0

Sie können Dateien durch Ziehen und Ablegen oder durch Zeigen und Klicken hochladen. Um Ordner hochzuladen, müssen Sie sie ziehen und ablegen. Die Drag & Drop-Funktion wird nur für die Browser Chrome und Firefox unterstützt

ABHAY JOHRI
quelle
0

Führen Sie einen ähnlichen Befehl aus:

aws s3 cp local_folder_name s3://s3_bucket_name/local_folder_name/ --recursive
jafig
quelle
-2

Sie können solche verschachtelten Strukturen nicht über das Online-Tool hochladen. Ich würde empfehlen, etwas wie Bucket Explorer für kompliziertere Uploads zu verwenden.

Scott
quelle
CloudBerry Explorer ist kostenlos - siehe oben
Cloudberryman
Versuchen Sie es mit einem anderen Browser. Ich finde, dass es mit Chrome 46.n funktioniert, aber nicht mit FireFox 41.0.2.
ScottWelker