Je crée une fonction de téléchargement de fichiers dans node.js avec express 3.
Je voudrais saisir l'extension de fichier de l'image. afin que je puisse renommer le fichier, puis y ajouter l'extension.
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);
});
Comment puis-je obtenir l'extension de l'image dans node.js?
javascript
node.js
file-type
georgesamper
la source
la source
Réponses:
Je pense que vous pouvez faire ce qui suit pour obtenir l'extension d'un nom de fichier.
la source
app.css.gz
ne reviendront que.gz
et non.css.gz
, ce qui peut ou non être ce que vous voulez.filename.split('.').pop();
.
.'filename.css.gz'.split('.').slice(1).join('.')
d'obtenir toutes les extensionsjone.lastTest.654654556.tar.gz
ici, l'extension qui est attendue est tar.gz mais si vous appliquez une fonction qui donne la forme du premier point, cela ne fonctionnera pas comme vous pouvez le voirMettre à jour
Depuis la réponse d'origine, extname () a été ajouté au
path
module, voir la réponse de SnowfishRéponse originale:
J'utilise cette fonction pour obtenir une extension de fichier, car je n'ai pas trouvé de moyen de le faire plus facilement (mais je pense qu'il y en a un):
vous devez avoir besoin de 'path' pour l'utiliser.
une autre méthode qui n'utilise pas le module de chemin:
la source
var is = fs.createReadStream(req.files.upload.path), fileType = is.path.split(/[. ]+/).pop();
Si vous utilisez express, veuillez ajouter la ligne suivante lors de la configuration du middleware (bodyParser)
la source
Il est beaucoup plus efficace d'utiliser la
substr()
méthode au lieu desplit()
&pop()
Jetez un œil aux différences de performances ici: http://jsperf.com/remove-first-character-from-string
Mise à jour d'août 2019 Comme l'a souligné @xentek dans les commentaires;
substr()
est désormais considérée comme une fonction héritée ( documentation MDN ). Vous pouvez utiliser à lasubstring()
place. La différence entresubstr()
etsubstring()
est que le deuxième argument desubstr()
est la longueur maximale à renvoyer tandis que le deuxième argument desubstring()
est l'indice où s'arrêter (sans inclure ce caractère). En outre,substr()
accepte les positions de départ négatives à utiliser comme décalage par rapport à la fin de la chaîne tandissubstring()
que non.la source
substr
il est considéré comme une fonction héritée et doit être évité lorsque cela est possible - Plus d'informations sur MDNCette solution prend en charge les querystrings!
la source
Une solution simple sans besoin d'exigence qui résout le problème d'extension de plusieurs périodes:
Ou si vous ne voulez pas le premier point:
Assurez-vous de tester que le fichier a également une extension.
la source
Je pense que le mappage de l'en-tête Content-Type dans la demande fonctionnera également. Cela fonctionnera même dans les cas où vous téléchargez un fichier sans extension. (lorsque le nom de fichier n'a pas d'extension dans la demande)
Supposons que vous envoyez vos données à l'aide de HTTP POST:
Ici, l'en-tête Content-Type contient le type MIME des données. Le mappage de ce type MIME à une extension vous donnera l'extension de fichier :).
Restify BodyParser convertit cet en-tête en une propriété de type nom
Vous pouvez utiliser cet en-tête et faire le mappage d'extension (sous-chaîne, etc.) manuellement, mais il existe également des bibliothèques prêtes à l'emploi pour cela. Ci-dessous deux étaient les meilleurs résultats quand j'ai fait une recherche google
et leur utilisation est également simple:
l'extrait ci-dessus imprimera le png sur la console.
la source
la source
path.extname
fera l'affaire dans la plupart des cas. Cependant, il inclura tout après le dernier.
, y compris la chaîne de requête et le fragment de hachage d'une demande http:Dans de tels cas, vous voudrez essayer quelque chose comme ceci:
Notez que les extensions avec plusieurs périodes (comme
.tar.gz
) ne fonctionneront pas du tout avecpath.extname
.la source
La fonction suivante fractionne la chaîne et renvoie le nom et l'extension quel que soit le nombre de points dans l'extension. Il renvoie une chaîne vide pour l'extension s'il n'y en a pas. Les noms commençant par des points et / ou des espaces blancs fonctionnent également.
la source
importez extname afin de renvoyer l'extension du fichier:
où fichier est le nom du fichier du formulaire
la source
Vous pouvez utiliser path.parse (path) , par exemple
la source
Essaye celui-là
la source