使用唯一/随机名称存储文件



借助新的 Firebase API,您可以从客户端代码将文件上传到云存储中。这些示例假定文件名在上传期间是已知的或静态的:

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

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

随着用户上传自己的文件,名称冲突将成为一个问题。如何让 Firebase 创建文件名而不是自己定义?数据库中是否有类似于用于创建唯一存储引用的push()功能?

Firebase Storage Product Manager here:

TL;DR:使用UUID生成器(在Android(UUID)和iOS(NSUUID)中内置它们,在JS中你可以使用这样的东西:在JavaScript中创建GUID/UUID?),然后附加文件扩展名,如果你想保留它(在'.上拆分 file.name 并得到最后一个片段)

我们不知道开发人员需要哪个版本的独特文件(见下文),因为有很多很多用例,所以我们决定将选择权留给开发人员。

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
在我看来,在我们的

文档中解释这是一件合理的事情,所以我会在内部提交一个错误来记录它:)

这是使用飞镖的人的解决方案

使用以下方法生成当前日期和时间戳:-

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

现在使用以下方法将文件上传到火力基地存储:-

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

您甚至可以使用以下方法获取可下载的网址:-

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

首先安装 uuid - npm i uuid

然后像这样定义文件引用

import { v4 as uuidv4 } from "uuid";
const fileRef = storageRef.child(
            `${uuidv4()}-${Put your file or image name here}`
          );

之后,与文件一起上传fileRef

fileRef.put(Your file)

在 Android (Kotlin) 中,我通过将用户 UID 与自 1970 年以来的毫秒数相结合来解决:

val ref = storage.reference.child("images/${auth.currentUser!!.uid}-${System.currentTimeMillis()}")

下面的代码是来自@Mike麦当劳的答案中的文件结构的组合,来自@ Aman Kumar Singh的答案中的当前日期时间戳,来自@Damien回答的用户uid:我认为它提供了唯一的ID,同时使Firebase存储屏幕更具可读性。

Reference ref = firebaseStorage
    .ref()
    .child('videos')
    .child(authController.user.uid)
    .child(DateTime.now().millisecondsSinceEpoch.toString());

相关内容

  • 没有找到相关文章

最新更新