Firebase 스토리지에서 전체 폴더를 다운로드하는 방법은 무엇입니까?
Firebase 저장소에서 전체 폴더를 다운로드하고 싶습니다.다음을 사용하여 단일 파일을 다운로드할 수 있습니다.DownloadURL
다음과 같이 하지만 폴더에는 작동하지 않습니다.
var storageRef = firebase.storage().ref();
// Create a reference to the file we want to download
var starsRef = storageRef.child(path);
// Get the download URL
starsRef.getDownloadURL().then(function(url) {
// Insert url into an <img> tag to "download"
ImageUrl = url;
console.log(ImageUrl);
}).catch(function(error) {
switch (error.code) {
case 'storage/object_not_found':
// File doesn't exist
break;
case 'storage/unauthorized':
// User doesn't have permission to access the object
break;
case 'storage/canceled':
// User canceled the upload
break;
case 'storage/unknown':
// Unknown error occurred, inspect the server response
break;
}
});
Firebase에서 전체 폴더를 다운로드하는 방법은 무엇입니까?
gsutil을 사용하여 전체 스토리지 버킷을 다운로드할 수 있습니다.
gsutil -m cp -R gs://<bucket_name> .
Firebase Storage에는 폴더의 모든 파일을 다운로드할 수 있는 API가 없습니다.파일을 하나씩 다운로드하거나 모든 파일이 들어 있는 zip 파일을 만들어야 합니다.
라히루의 대답이 보여주듯이, 그것은 다음과 같이 달성될 수 있습니다.gsutils
그러나 이 작업은 서버 측 작업입니다. 클라이언트 측 응용 프로그램에서 실행하는 작업이 아닙니다.
관련:
Windows용 명령 gustil!!!
gsutil cp -r gs://<bucket_name>.appspot.com/OBJECT_NAME "D:\path"
PowerShell용 클라우드 도구 사용
설치 창에 대한 REF >> https://cloud.google.com/storage/docs/gsutil_install
폴더의 zip 파일을 생성하여 폴더를 다운로드할 수 있습니다.
다음은 샘플 기능입니다.
import JSZip from 'jszip';
import { saveAs } from 'file-saver';
import {
getStorage,
listAll,
ref,
getDownloadURL,
getMetadata,
} from 'firebase/storage';
import { auth } from '../../Firebase';
export const downloadFolderAsZip = async () => {
const jszip = new JSZip();
const storage = getStorage();
const folderRef = ref(
storage,
'images'
);
const folder = await listAll(folderRef);
const promises = folder.items
.map(async (item) => {
const file = await getMetadata(item);
const fileRef = ref(storage, item.fullPath);
const fileBlob = await getDownloadURL(fileRef).then((url) => {
return fetch(url).then((response) => response.blob());
});
jszip.file(file.name, fileBlob);
})
.reduce((acc, curr) => acc.then(() => curr), Promise.resolve());
await promises;
const blob = await jszip.generateAsync({ type: 'blob' });
saveAs(blob, 'download.zip');
};
zip 파일에 하위 폴더가 포함된 재귀 솔루션은 다음 샘플을 참조하십시오.당신은 jszip 객체를 인스턴스화하고, 파일을 압축하고 디렉터리를 이동하는 함수의 약속을 기다린 다음 zip을 저장합니다.내용이 파일("항목")이면 jszip 개체에 압축됩니다.폴더("접두사")인 경우 함수는 동일한 jszip 개체를 전달하는 새 하위 경로로 다시 호출됩니다.추가적인 개선을 위해, 당신은 다음과 같은 내용을 참조하십시오.list
그리고 당신의 콘텐츠가 너무 많으면 페이지를 표시합니다.listAll
,부터listAll
검색을 제한합니다.
import JSZip from 'jszip';
import { saveAs } from 'file-saver';
import {
getStorage, ref, getBlob, listAll,
} from "firebase/storage";
const addFilesFromDirectoryToZip = async (directoryPath = "", zip) => {
const storage = getStorage();
const directoryContentsRef = ref(
storage,
directoryPath
);
const directoryContents = await listAll(directoryContentsRef);
for (const file of directoryContents.items) {
const fileRef = ref(storage, file.fullPath);
const fileBlob = await getBlob(fileRef)
zip.file(file.fullPath, fileBlob);
}
for (const folder of directoryContents.prefixes) {
await addFilesFromDirectoryToZip(folder.fullPath, zip);
};
};
export const downloadFolderAsZip = async (directoryPath = "") => {
const zip = new JSZip();
await addFilesFromDirectoryToZip(directoryPath, zip);
const blob = await zip.generateAsync({ type: "blob" });
const name = directoryPath.split('/').pop();
saveAs(blob, name);
};
언급URL : https://stackoverflow.com/questions/41461337/how-to-download-entire-folder-from-firebase-storage
'programing' 카테고리의 다른 글
새 아스퍼.NetMVC5 프로젝트는 로그인 페이지에 대한 무한 루프를 생성합니다. (0) | 2023.06.07 |
---|---|
파이썬 코드를 한 줄씩 프로파일링하려면 어떻게 해야 합니까? (0) | 2023.06.07 |
web.xml이 누락되었으며 true로 설정되었습니다. (0) | 2023.06.02 |
왜 사람들은 루비가 느리다고 말합니까? (0) | 2023.06.02 |
안드로이드 앱의 릴리스 버전을 구축하기 전에 디버그 로깅 호출을 모두 제거하는 방법은 무엇입니까? (0) | 2023.06.02 |