我是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);
答案 0 :(得分:0)
您不能直接更改文件名。但是有一种间接的方法,请检查此question
您希望将用户的UID作为文件名,但是不会在createUserWithEmailAndPassword
中得到它,因此您需要将该逻辑添加到onAuthStateChanged
方法中。但是onAuthStateChanged
每当用户登录时都会被调用,因此您需要构建某种逻辑以仅在用户登录时才执行文件上载方法。
答案 1 :(得分:0)
要对创建的用户帐户做出响应,可以使用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) {
...