44

使用新的 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()用于创建唯一存储引用的功能?

4

3 回答 3

82

Firebase 存储产品经理在这里:

TL;DR:使用 UUID 生成器(在 Android ( UUID ) 和 iOS ( NSUUID ) 中它们是内置的,在 JS 中你可以使用类似这样的东西:在 JavaScript 中创建 GUID / UUID?),然后根据需要附加文件扩展名保留它(在“。”上拆分文件名并获取最后一段)

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

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

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

于 2016-05-25T18:18:39.463 回答
3

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

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

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

现在使用以下命令将文件上传到 Firebase 存储:-

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

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

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

于 2021-08-21T21:05:56.650 回答
2

首先安装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)

于 2021-01-28T06:39:16.927 回答