Ich verwende node.js (express) auf Heroku, wo die Slug-Größe auf 300 MB begrenzt ist .
Um meinen Slug klein zu halten, möchte ich git-lfs verwenden, um meinen Express-Ordner " public
" zu verfolgen.
Auf diese Weise werden alle meine Inhalte (Bilder, Videos ...) in einen lfs-Store hochgeladen (zB AWS S3) und git-lfs verlässt eine Zeigerdatei (mit wahrscheinlich der S3-URL drin?).
Ich möchte Umleitungen auf die Remote-S3-Datei ausdrücken, wenn ich Dateien aus dem öffentlichen Ordner diene.
Mein Problem ist, dass ich nicht weiß, wie ich die URL aus dem Inhalt der Zeigerdatei abruft ...
%Vor% Glauben Sie nicht, dass es nicht zu teuer ist, alle public/*
-Dateien lesen und parsen zu lassen. Vielleicht könnte ich die URL einmal geparst?
Ich habe endlich eine Middleware dafür gemacht: express-lfs mit einer Demo hier: Ссылка
Dort können Sie eine 400Mo Datei als Beweis herunterladen.
Siehe Verwendung hier: Ссылка
PS: Danke @fondeldman für gute Ratschläge in seiner antworte ;)
Tatsächlich enthält die pointer
-Datei keine URL-Informationen darin (wie in dem von Ihnen bereitgestellten Link zu sehen ist, oder hier ) - es behält nur die oid
(Objekt-ID) für den Blob, der nur sein sha256
ist.
Sie können jedoch mit der oid
und der lfs API erreichen, wonach Sie suchen , mit dem Sie bestimmte oid
s mithilfe der Stapelanforderung .
Sie können feststellen, welcher Endpunkt zum Speichern Ihrer Blobs verwendet wird, aus .git/config
, der nicht standardmäßige lfsurl
-Tags wie:
oder ein separates
%Vor% Wenn es kein lfsurl
-Tag gibt, verwenden Sie den Endpunkt von GitHub (der wiederum zu S3 umleiten kann):
Aber Sie sollten dagegen arbeiten und nicht direkt S3, da GitHubs Redirect-Antwort wahrscheinlich auch einige Authentifizierungsinformationen enthalten wird.
Überprüfen Sie die Stapelantwort doc, um die Antwortstruktur zu sehen - Sie müssen im Grunde die relevanten Teile analysieren und einen eigenen Aufruf machen, um die Blobs zu erhalten (was git lfs
an Ihrer Stelle während des Checkouts getan hätte).
Eine typische Antwort (aus dem Dokument, auf das ich verwiesen habe) würde etwa so aussehen:
%Vor% Sie würden also GET
https://storage-server.com/OID
mit was auch immer headers
von der Stapelantwort zurückgegeben wurde - der letzte Schritt wird sein, den Blob umzubenennen, der zurückgegeben wurde (sein Name ist typischerweise nur der oid
als git lfs verwendet Prüfsummen-basierten Speicher) - die Zeigerdatei hat den Namen der ursprünglichen Ressource, also benennen Sie einfach den Blob in diesen um.