web-dev-qa-db-fra.com

Stocker des fichiers avec des noms uniques / aléatoires

Avec la nouvelle API Firebase, vous pouvez télécharger des fichiers dans le stockage cloud à partir du code client. Les exemples supposent que le nom du fichier est connu ou statique pendant le téléchargement:

// Create a root reference
var storageRef = firebase.storage().ref();

// Create a reference to 'mountains.jpg'
var mountainsRef = storageRef.child('mountains.jpg');

// Create a reference to 'images/mountains.jpg'
var mountainImagesRef = storageRef.child('images/mountains.jpg');

ou

// File or Blob, assume the file is called rivers.jpg
var file = ...

// Upload the file to the path 'images/rivers.jpg'
// We can use the 'name' property on the File API to get our file name
var uploadTask = storageRef.child('images/' + file.name).put(file);

Avec les utilisateurs qui téléchargent leurs propres fichiers, les conflits de noms vont être un problème. Comment pouvez-vous demander à Firebase de créer un nom de fichier au lieu de le définir vous-même? Existe-t-il quelque chose comme la fonction Push() dans la base de données pour créer des références de stockage uniques?

29
Travis Christian

Firebase Storage Product Manager ici:

TL; DR: utilisez un générateur UUID (dans Android ( UUID ) et iOS ( NSUUID ) ils sont intégrés, dans JS, vous pouvez utiliser quelque chose comme ceci: Créer GUID/UUID en JavaScript? ) , puis ajoutez l'extension de fichier si vous souhaitez la conserver (divisez le fichier.name sur '.' et obtenez le dernier segment)

Nous ne savions pas quelle version de fichiers uniques les développeurs souhaiteraient (voir ci-dessous), car il existe de très nombreux cas d'utilisation pour cela, nous avons donc décidé de laisser le choix aux développeurs.

images/uuid/image.png   // option 1: clean name, under a UUID "folder"
image/uuid.png          // option 2: unique name, same extension
images/uuid             // option 3: no extension

Il me semble que ce serait une chose raisonnable à expliquer dans notre documentation, donc je vais déposer un bug en interne pour le documenter :)

53
Mike McDonald