# #reactjs #firebase
Вопрос:
Я пытаюсь повторно загрузить/переместить файл уже существовал в огневой базы хранения к другому пути в ту же огневую базу хранения различных папок и изменение его имя через «возвращение» -действия, поэтому файл становится загружен, но повреждены => это означает, когда я пытаюсь открыть его, он открывается без каких-либо данных/изображения и размер изображения 9B
кодекса:
// upload the same file with new path and remove the old file
let uploadAndDeletePromises = fileArr.map(
(fileData, index) =>
storageRef
// newpaths=folderName/FolderWithIdName/fileName__docId.png
.child(newFilesPaths[index])
.put(
// filesToUpload data showed in the pictures below
filesToUpload[index],
// metadata={customMetadata:
// {uplaoderId:"",PrId:""}
metadata[index]
)
.then(() =>
//remove old path
storageRef
// fileData.path -> the old path
// FolderName/folderWithIdName/fileName.png
.child(fileData.path)
.delete()
)
);
return Promise.all(uploadAndDeletePromises);
результат filesToUpload
от оригинального, который хорошо работает, это когда я загружаю его в первый раз:
результат filesToUpload
от того, который я хочу повторно загрузить из хранилища firebase на другой путь в хранилище firestore, это когда я пытаюсь повторно загрузить по другому пути:
Любой, у кого есть опыт обработки/перемещения файла с пути на другой и изменения его имени, использует действия react js, хранилище firebase, а не node js.
Ответ №1:
Функции для перемещения файла находятся в библиотеках на стороне сервера. Если вы хотите переместить файл в клиенте, вам придется выполнить следующие действия:
1. Загрузите файл
2. Загрузите файл в новое место
3. Удалите предыдущий файл (если требуется).
Похоже, у вас есть идея о том, как загрузить новый файл и удалить предыдущий, но у вас возникли проблемы с загрузкой предыдущего файла (именно поэтому загружается файл 9B).
Согласно документации, вы должны загрузить файл следующим образом
storageRef.child('path/to/file').getDownloadURL()
.then((url) => {
// `url` is the download URL for the file
// This can be downloaded directly:
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.onload = (event) => {
var blob = xhr.response;
// insert upload and delete code here
};
xhr.open('GET', url);
xhr.send();
})
.catch((error) => {
// Handle any errors
});