Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Store files with unique/random names

With the new Firebase API you can upload files into cloud storage from client code. The examples assume the file name is known or static during upload:

// 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');

or

// 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);

With users uploading their own files, name conflicts are going to be an issue. How can you have Firebase create a filename instead of defining it yourself? Is there something like the push() feature in the database for creating unique storage references?

like image 521
Travis Christian Avatar asked May 25 '16 18:05

Travis Christian


4 Answers

Firebase Storage Product Manager here:

TL;DR: Use a UUID generator (in Android (UUID) and iOS (NSUUID) they are built in, in JS you can use something like this: Create GUID / UUID in JavaScript?), then append the file extension if you want to preserve it (split the file.name on '.' and get the last segment)

We didn't know which version of unique files developers would want (see below), since there are many, many use cases for this, so we decided to leave the choice up to developers.

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

It seems to me like this would be a reasonable thing to explain in our documentation though, so I'll file a bug internally to document it :)

like image 134
Mike McDonald Avatar answered Nov 01 '22 06:11

Mike McDonald


This is the solution for people using dart

Generate the current date and time stamp using:-

var time = DateTime.now().millisecondsSinceEpoch.toString();

Now upload the file to the firebase storage using:-

await FirebaseStorage.instance.ref('images/$time.png').putFile(yourfile);

You can even get the downloadable url using:-

var url = await FirebaseStorage.instance.ref('images/$time.png').getDownloadURL();

like image 4
Aman Kumar Singh Avatar answered Nov 01 '22 06:11

Aman Kumar Singh


First install uuid - npm i uuid

Then define the file reference like this

import { v4 as uuidv4 } from "uuid";

const fileRef = storageRef.child(
            `${uuidv4()}-${Put your file or image name here}`
          );

After that, upload with the file with the fileRef

fileRef.put(Your file)

like image 2
Shisui Avatar answered Nov 01 '22 07:11

Shisui


In Android (Kotlin) I solved by combining the user UID with the milliseconds since 1970:

val ref = storage.reference.child("images/${auth.currentUser!!.uid}-${System.currentTimeMillis()}")
like image 1
Damien Avatar answered Nov 01 '22 05:11

Damien