accès aux images à partir de s3 de façon insensible à la casse
J'ai été en utilisant exprimer dans node.js où il était de servir des images statiques dans une casse manière, mais quand j'ai déménagé à la s3, j'ai trouvé que les images sont sensibles à la casse.
Est-il de toute façon dans amazon s3, pour servir les fichiers statiques (images) dans une casse de la sorte ? n'importe quelle configuration ? sinon, mon meilleur pari serait de convertir les images en minuscules avant de le METTRE en-ing à s3.
Mise à JOUR
Un autre problème, c++.jpg n'est pas rendu par s3, il le besoin d'être converti en c%2B%2B.jpg. Alors que, du c++.jpg est rendu comme un charme par l'express. Aucune solution de contournement ?
Vous devez vous connecter pour publier un commentaire.
Non, les noms de fichiers sur S3 sont sensibles à la casse. Sans doute c'est une restriction de la sous-linux/unix système de fichiers.
Je recommande toujours aux gens de télécharger uniquement les noms de fichiers en minuscules.
Il convient également de noter que la S3 est conçu pour être accessible par HTTP(S). Les url en HTTP sont sensibles à la casse. Les serveurs qui permettent l'accès à des Url dans une casse sont cassés parce qu'ils pourraient polluer les caches. Les fichiers
image.jpg
,Image.jpg
,IMAGE.JPG
pourrait pointer vers le même fichier, mais un cache ne savent pas et de la charge plusieurs fois le même fichier. Même pour un navigateur web. Si vous vous référez à la même image deux fois sur la page, une fois queimage.jpg
et une fois queImage.jpg
, le navigateur de charger l'image en deux fois. Par conséquent, il n'est pas logique d'exiger que S3 devrait être sensible à la casse. Au lieu de rester à ce que les Rfc sur les Url HTTP et de la dire et de fixer votre site web.BTW si le sous-jacent magasin d'objet est mis en œuvre sur POSIX (Unix, Linux) ou Windows n'a pas d'importance pour ce sujet, c'est sur l'URL HTTP et les spécifications (Rfc).
Chaque fois que vous téléchargez un fichier à S3, vous créez une URL. Pour s'assurer que vous êtes en sécurité, vous voudrez peut-être évaluer les noms de fichiers que vous utilisez. RFC-quelque Chose de spécifications pour les Url HTTP autoriser uniquement pour les caractères suivants pour être dans les URLs.
RegEx
Un nom de fichier qui ne correspond pas à ce modèle, vous pouvez vouloir modifier dans un effort pour être des URL conformes. AWS est Sensible à la casse, principalement parce qu'il est conçu comme un Magasin d'Objets. Lors de la persistance des objets. De nombreuses fois que les objets qui sont écrites sont conservées avec un base64 URL Sûr codé de hachage afin de créer une plus fiables temps de recherche pour les objets lors de la récupération.
AWS a introduit lambda bord Maintenant.Vous pouvez pointer un domaine(le nom d'hôte de s3 qui vous utilisez) pour cloudfront, configurer votre s3 seau comme le backend et joindre un lambda de bord de la fonction de la cloudfront.
Sélectionnez visionneuse demande de l'événement de déclenchement de la fonction lambda.Ci-dessous nodejs code lambda va convertir toutes les demandes reçues par cloudfront pour les minuscules et les passer à l'arrière-plan compartiment s3.Le code ci-dessous a fonctionné pour moi.
Le flux de travail est comme ci-dessous.
Demande(mixedcase uri) --> cloudfront --> (fonction Lambda qui va changer uri en minuscules) --> s3(l'uri doit être en minuscule une fois que la demande est reçue )