我是 firebase 和 Javascript 的新手。
如何将文件名更改为用户的 uid 并将其保存到存储中?
我想在注册成功后上传文件。我应该在 createUserWithEmailAndPassword 或 onAuthStateChanged 中编写函数吗?
function handleFileSelect(evt) {
evt.stopPropagation();
evt.preventDefault();
var file = evt.target.files[0];
var metadata = {
'contentType': file.type
};
var storage_ref = storage.ref();
storage_ref.child('userImages/' + user.uid).put(file, metadata).then(function(snapshot) {
snapshot.ref.getDownloadURL().then(function(url) {
console.log('File available at', url);
profile_url = url;
});
}).catch(function(error) {
console.error('Upload failed:', error);
});
} // handleFileSelect
document.getElementById('input_img').addEventListener('change',handleFileSelect, false);
您无法直接更改文件名。但有一种间接的方法可以做到这一点,请检查这个问题
您想要用户的 UID 作为文件名,但您不会在
createUserWithEmailAndPassword
中获得它,因此您需要将该逻辑添加到 onAuthStateChanged
方法中。但是 onAuthStateChanged
每次用户登录时都会被调用,因此您需要构建某种逻辑来仅在用户第一次登录时执行文件上传方法。
要针对正在创建的用户帐户采取操作,您可以使用
then
。
所以类似:
function handleFileSelect(evt) {
evt.stopPropagation();
evt.preventDefault();
firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
}.then(function(credential) {
var user = credential.user
var file = evt.target.files[0];
var metadata = {
'contentType': file.type
};
var storage_ref = storage.ref();
storage_ref.child('userImages/' + user.uid).put(file, metadata).then(function(snapshot) {
snapshot.ref.getDownloadURL().then(function(url) {
...
以防万一有人仍然想知道如何执行此操作:现在在同一个存储桶中重命名非常容易。
对我来说...
const oldFilename = 'folder/file.png';
const newFilename = 'folder/filenew.png';
admin.storage().bucket().file(oldFilename).rename(newFilename);
...对我来说效果很好。