Ich erstelle eine Datei-Upload-Funktion in node.js mit Express 3.
Ich möchte die Dateierweiterung des Bildes greifen. so kann ich die Datei umbenennen und dann die Dateierweiterung an sie anhängen.
app.post('/upload', function(req, res, next) {
var is = fs.createReadStream(req.files.upload.path),
fileExt = '', // I want to get the extension of the image here
os = fs.createWriteStream('public/images/users/' + req.session.adress + '.' + fileExt);
});
Wie kann ich die Erweiterung des Bildes in node.js erhalten?
javascript
node.js
file-type
Georgesamper
quelle
quelle
Antworten:
Ich glaube, Sie können Folgendes tun, um die Erweiterung eines Dateinamens zu erhalten.
quelle
app.css.gz
nur zurückgegeben werden.gz
und nicht.css.gz
, was möglicherweise das ist, was Sie wollen oder nicht.filename.split('.').pop();
.
.'filename.css.gz'.split('.').slice(1).join('.')
, alle Erweiterungen zu bekommenjone.lastTest.654654556.tar.gz
hier? Die erwartete Erweiterung ist tar.gz, aber wenn Sie eine Funktion anwenden, die das Formular 1. Punkt ergibt, funktioniert es nicht, wie Sie sehen könnenAktualisieren
Da die ursprüngliche Antwort extname () zum
path
Modul hinzugefügt wurde , siehe Antwort von SnowfishUrsprüngliche Antwort:
Ich verwende diese Funktion, um eine Dateierweiterung zu erhalten, da ich keinen einfacheren Weg gefunden habe (aber ich denke, dass es einen gibt):
Sie müssen 'Pfad' benötigen, um es zu verwenden.
eine andere Methode, die das Pfadmodul nicht verwendet:
quelle
var is = fs.createReadStream(req.files.upload.path), fileType = is.path.split(/[. ]+/).pop();
Wenn Sie Express verwenden, fügen Sie bei der Konfiguration der Middleware (bodyParser) die folgende Zeile hinzu.
quelle
Es ist viel effizienter, die
substr()
Methode anstelle vonsplit()
& zu verwendenpop()
Schauen Sie sich die Leistungsunterschiede hier an: http://jsperf.com/remove-first-character-from-string
Update August 2019 Wie von @xentek in den Kommentaren ausgeführt;
substr()
wird jetzt als Legacy-Funktion betrachtet ( MDN-Dokumentation ). Sie könnensubstring()
stattdessen verwenden. Der Unterschied zwischensubstr()
undsubstring()
besteht darin, dass das zweite Argument vonsubstr()
die maximale Länge ist, die zurückgegeben werden soll, während das zweite Argument vonsubstring()
der Index ist, bei dem angehalten werden soll (ohne dieses Zeichen einzuschließen). Auchsubstr()
akzeptiert negative Startpositionen verwendet werden , wie ein vom Ende des Strings versetzt , währendsubstring()
dies nicht tut.quelle
substr
es sich um eine Legacy-Funktion handelt und nach Möglichkeit vermieden werden sollte. Weitere Informationen zu MDNDiese Lösung unterstützt Querystringe!
quelle
Eine einfache Lösung ohne Notwendigkeit, die das Problem der Verlängerung um mehrere Perioden löst:
Oder wenn Sie den führenden Punkt nicht möchten:
Stellen Sie sicher, dass Sie testen, ob die Datei auch eine Erweiterung hat.
quelle
Ich denke, dass das Zuordnen des Content-Type-Headers in der Anfrage auch funktionieren wird. Dies funktioniert auch in Fällen, in denen Sie eine Datei ohne Erweiterung hochladen. (wenn der Dateiname keine Erweiterung in der Anfrage hat)
Angenommen, Sie senden Ihre Daten über HTTP POST:
Hier enthält der Name Content-Type-Header den MIME-Typ der Daten. Wenn Sie diesen MIME-Typ einer Erweiterung zuordnen, erhalten Sie die Dateierweiterung :).
Restify BodyParser wandelt diesen Header in einer Eigenschaft mit dem Namen Typ
Sie können diesen Header verwenden und die Erweiterungszuordnung (Teilzeichenfolge usw.) manuell durchführen. Hierfür gibt es jedoch auch vorgefertigte Bibliotheken. Unter zwei waren die Top-Ergebnisse, als ich eine Google-Suche durchgeführt habe
und ihre Verwendung ist ebenfalls einfach:
Über dem Snippet wird PNG auf der Konsole gedruckt .
quelle
quelle
path.extname
wird den Trick in den meisten Fällen tun. Es enthält jedoch alles nach dem letzten.
, einschließlich der Abfragezeichenfolge und des Hash-Fragments einer http-Anforderung:In solchen Fällen sollten Sie Folgendes ausprobieren:
Beachten Sie, dass Erweiterungen mit mehreren Zeiträumen (z. B.
.tar.gz
) überhaupt nicht funktionierenpath.extname
.quelle
Die folgende Funktion teilt die Zeichenfolge und gibt den Namen und die Erweiterung zurück, unabhängig davon, wie viele Punkte sich in der Erweiterung befinden. Es gibt eine leere Zeichenfolge für die Erweiterung zurück, wenn keine vorhanden ist. Namen, die mit Punkten und / oder Leerzeichen beginnen, funktionieren ebenfalls.
quelle
importiere extname, um die Erweiterung der Datei zurückzugeben:
Dabei ist Datei der Dateiname des Formulars
quelle
Sie können mit path.parse (Pfad) , zum Beispiel
quelle
Probier diese
quelle