Firebase 앱에서 클라우드 스토리지의 모든 파일 목록을 가져오는 방법은 무엇입니까?
저는 이미지를 업로드하는 작업을 하고 있습니다. 모든 것이 잘 작동합니다. 하지만 저는 100장의 사진을 가지고 있고 그것들을 모두 보여주고 싶습니다.View
폴더에 있는 이미지의 전체 목록을 가져올 때 이 작업에 대한 API를 찾을 수 없습니다.
JavaScript Release 6.1, iOS Release 6.4 및 Android Release 18.1용 Firebase SDK에는 모두 파일을 나열하는 방법이 있습니다.
아직까지는 서류가 좀 부족하기 때문에 자세한 내용은 로사리오의 답변을 확인하는 것을 추천합니다.
이전 답변: 이 접근 방식은 여전히 유용할 수 있기 때문입니다.
현재 Firebase SDK에는 앱 내에서 Cloud Storage 폴더의 모든 파일을 나열하는 API 호출이 없습니다.이러한 기능이 필요한 경우 파일의 메타데이터(예: 다운로드 URL)를 나열할 수 있는 위치에 저장해야 합니다.Firebase Realtime Database 및 Cloud Firestore를 사용하면 다른 사용자와 URL을 쉽게 공유할 수 있습니다.
FriendlyPix 샘플 앱에서 이에 대한 좋은 샘플을 찾을 수 있습니다.웹 버전의 관련 코드는 여기에 있지만 iOS와 Android 버전도 있습니다.
2019년 5월 현재 Cloud 스토리지용 Firebase SDK 버전 6.1.0은 버킷의 모든 개체 나열을 지원합니다.당신은 그저 전화만 하면 됩니다.listAll()
순식간에Reference
:
// Since you mentioned your images are in a folder,
// we'll create a Reference to that folder:
var storageRef = firebase.storage().ref("your_folder");
// Now we get the references of these images
storageRef.listAll().then(function(result) {
result.items.forEach(function(imageRef) {
// And finally display them
displayImage(imageRef);
});
}).catch(function(error) {
// Handle any errors
});
function displayImage(imageRef) {
imageRef.getDownloadURL().then(function(url) {
// TODO: Display the image on the UI
}).catch(function(error) {
// Handle any errors
});
}
이 기능을 사용하려면 보안 규칙 버전 2에 옵트인해야 합니다. 이는 다음을 수행하여 수행할 수 있습니다.rules_version = '2';
보안 규칙의 첫 번째 줄:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
추가 참조를 위해 문서를 확인하는 것이 좋습니다.
또한 설정에 따라 5단계에서 이 스크립트는 허용되지 않습니다.Node.js
이래require("firebase/app");
않을 것입니다.firebase.storage()
함수로서이는 다음을 사용하는 경우에만 달성됩니다.import * as firebase from 'firebase/app';
.
2017년 3월 이후: Firebase Cloud Functions가 추가되고 Firebase가 Google Cloud와 더욱 긴밀하게 통합됨에 따라 이제 이것이 가능해졌습니다.
클라우드 기능을 사용하면 Google Cloud Node 패키지를 사용하여 클라우드 스토리지에서 중요한 작업을 수행할 수 있습니다.다음은 Cloud Storage에서 모든 파일 URL을 어레이로 가져오는 예제입니다.이 기능은 Google 클라우드 저장소에 저장할 때마다 트리거됩니다.
참고 1: 버킷/폴더의 모든 파일을 순환해야 하기 때문에 계산 비용이 많이 드는 작업입니다.
참고 2: 저는 약속 등에 많은 세부 사항을 고려하지 않고 단지 예시로 이것을 썼습니다.그냥 아이디어를 내려고요.
const functions = require('firebase-functions');
const gcs = require('@google-cloud/storage')();
// let's trigger this function with a file upload to google cloud storage
exports.fileUploaded = functions.storage.object().onChange(event => {
const object = event.data; // the object that was just uploaded
const bucket = gcs.bucket(object.bucket);
const signedUrlConfig = { action: 'read', expires: '03-17-2025' }; // this is a signed url configuration object
var fileURLs = []; // array to hold all file urls
// this is just for the sake of this example. Ideally you should get the path from the object that is uploaded :)
const folderPath = "a/path/you/want/its/folder/size/calculated";
bucket.getFiles({ prefix: folderPath }, function(err, files) {
// files = array of file objects
// not the contents of these files, we're not downloading the files.
files.forEach(function(file) {
file.getSignedUrl(signedUrlConfig, function(err, fileURL) {
console.log(fileURL);
fileURLs.push(fileURL);
});
});
});
});
이것이 당신에게 일반적인 생각을 주기를 바랍니다.더 나은 클라우드 기능 예제를 보려면 Firebase용 Cloud Functions 샘플로 가득 찬 Google의 Githubo를 확인하십시오.Google Cloud Node API 설명서도 확인할 수 있습니다.
나열된 언어가 없기 때문에 스위프트로 답변드리겠습니다.다운로드 목록을 작성하려면 Firebase Storage와 Firebase Realtime Database를 함께 사용하는 것이 좋습니다.
공유:
// Firebase services
var database: FIRDatabase!
var storage: FIRStorage!
...
// Initialize Database, Auth, Storage
database = FIRDatabase.database()
storage = FIRStorage.storage()
...
// Initialize an array for your pictures
var picArray: [UIImage]()
업로드:
let fileData = NSData() // get data...
let storageRef = storage.reference().child("myFiles/myFile")
storageRef.putData(fileData).observeStatus(.Success) { (snapshot) in
// When the image has successfully uploaded, we get it's download URL
let downloadURL = snapshot.metadata?.downloadURL()?.absoluteString
// Write the download URL to the Realtime Database
let dbRef = database.reference().child("myFiles/myFile")
dbRef.setValue(downloadURL)
}
다운로드:
let dbRef = database.reference().child("myFiles")
dbRef.observeEventType(.ChildAdded, withBlock: { (snapshot) in
// Get download URL from snapshot
let downloadURL = snapshot.value() as! String
// Create a storage reference from the URL
let storageRef = storage.referenceFromURL(downloadURL)
// Download the data, assuming a max size of 1MB (you can change this as necessary)
storageRef.dataWithMaxSize(1 * 1024 * 1024) { (data, error) -> Void in
// Create a UIImage, add it to the array
let pic = UIImage(data: data)
picArray.append(pic)
})
})
자세한 내용은 앱에 제로: Firebase로 개발을 참조하십시오. 이 방법에 대한 실질적인 예는 관련 소스 코드입니다.
이 게시물과 여기에서 나온 몇 가지 답변과 개인적인 조사 후 노드에 대한 몇 가지 답변을 결합합니다.JS 타입 스크립트를 사용하여 이를 달성했습니다.firebase-admin
:
import * as admin from 'firebase-admin';
const getFileNames = () => {
admin.storage().bucket().getFiles(autoPaginate: false).then(([files]: any) => {
const fileNames = files.map((file: any) => file.name);
return fileNames;
})
}
저의 경우에도 특정 폴더에 있는 모든 파일을 Firebase 스토리지에서 가져와야 했습니다.Google 스토리지에 따르면 폴더는 존재하지 않으며 오히려 이름 지정 규칙입니다.어쨌든 저는 (각 파일의 전체 경로를 DB에 저장하지 않고) 다음과 같이 추가했습니다.{ prefix: ${folderName}, autoPaginate: false }
에의 에.getFiles
함수 호출 so:
...
const getFileNames = (folderName: string) => {
admin.storage().bucket().getFiles({ prefix: `${folderName}`, autoPaginate: false })
.then(([files]: any) => {
...
저도 프로젝트를 진행할 때 이 문제에 부딪혔습니다.나는 그들이 end api 방법을 제공하기를 정말 바랍니다.어쨌든, 내가 한 방법은 이렇습니다.이미지를 Firebase 저장소에 업로드할 때 개체를 생성하고 이 개체를 Firebase 데이터베이스에 동시에 전달합니다.이 개체에는 이미지의 다운로드 URI가 포함되어 있습니다.
trailsRef.putFile(file).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Uri downloadUri = taskSnapshot.getDownloadUrl();
DatabaseReference myRef = database.getReference().child("trails").child(trail.getUnique_id()).push();
Image img = new Image(trail.getUnique_id(), downloadUri.toString());
myRef.setValue(img);
}
});
나중에 폴더에서 이미지를 다운로드하려면 해당 폴더 아래의 파일을 반복하기만 하면 됩니다.이 폴더의 이름은 Firebase 저장소의 "folder"와 동일하지만 원하는 이름으로 지정할 수 있습니다.저는 그것들을 별도의 실에 넣었습니다.
@Override
protected List<Image> doInBackground(Trail... params) {
String trialId = params[0].getUnique_id();
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("trails").child(trialId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
images = new ArrayList<>();
Iterator<DataSnapshot> iter = dataSnapshot.getChildren().iterator();
while (iter.hasNext()) {
Image img = iter.next().getValue(Image.class);
images.add(img);
}
isFinished = true;
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
이제 각 이미지에 대한 URI가 포함된 개체 목록이 있으므로 원하는 모든 작업을 수행할 수 있습니다.이미지 보기에 로드하기 위해 다른 스레드를 만들었습니다.
@Override
protected List<Bitmap> doInBackground(List<Image>... params) {
List<Bitmap> bitmaps = new ArrayList<>();
for (int i = 0; i < params[0].size(); i++) {
try {
URL url = new URL(params[0].get(i).getImgUrl());
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
bitmaps.add(bmp);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return bitmaps;
}
비트맵 목록을 반환합니다. 비트맵이 완료되면 기본 활동의 ImageView에 첨부하기만 하면 됩니다.아래 메소드는 인터페이스를 만들고 다른 스레드에서 완료를 듣기 때문에 @Override입니다.
@Override
public void processFinishForBitmap(List<Bitmap> bitmaps) {
List<ImageView> imageViews = new ArrayList<>();
View v;
for (int i = 0; i < bitmaps.size(); i++) {
v = mInflater.inflate(R.layout.gallery_item, mGallery, false);
imageViews.add((ImageView) v.findViewById(R.id.id_index_gallery_item_image));
imageViews.get(i).setImageBitmap(bitmaps.get(i));
mGallery.addView(v);
}
}
먼저 목록 이미지가 반환될 때까지 기다린 다음 스레드를 호출하여 목록 비트맵에서 작업해야 합니다.이 경우 이미지에는 URI가 포함됩니다.
@Override
public void processFinish(List<Image> results) {
Log.e(TAG, "get back " + results.size());
LoadImageFromUrlTask loadImageFromUrlTask = new LoadImageFromUrlTask();
loadImageFromUrlTask.delegate = this;
loadImageFromUrlTask.execute(results);
}
누군가 도움이 되길 바랍니다.그것은 또한 미래에 나 자신을 위한 길드 라인이 될 것입니다.
listAll() 메서드를 사용하여 firebase 저장소 디렉터리에 파일을 나열할 수 있습니다.이 방법을 사용하려면 이 버전의 Firebase 스토리지를 구현해야 합니다.'com.google.화재 기지:화재 기지-저장고:18.1.1'
https://firebase.google.com/docs/storage/android/list-files
보안 규칙을 버전 2로 업그레이드합니다.
내부에 아무것도 없는 파일(예: list.txt)을 만드는 것이 해결 방법일 수 있습니다. 이 파일에서 모든 파일의 URL 목록을 사용하여 사용자 지정 메타데이터(즉, Map<String, String>)를 설정할 수 있습니다.
따라서 Foodler의 모든 파일을 다운로드해야 하는 경우 먼저 목록의 메타데이터를 다운로드합니다.txt 파일을 사용하면 사용자 지정 데이터를 반복하여 맵에 URL이 있는 모든 파일을 다운로드할 수 있습니다.
업로드된 모든 이미지를 추적하여 데이터베이스에 저장하는 클라우드 기능을 사용하여 이미지를 데이터베이스에 추가하는 또 다른 방법입니다.
exports.fileUploaded = functions.storage.object().onChange(event => {
const object = event.data; // the object that was just uploaded
const contentType = event.data.contentType; // This is the image Mimme type\
// Exit if this is triggered on a file that is not an image.
if (!contentType.startsWith('image/')) {
console.log('This is not an image.');
return null;
}
// Get the Signed URLs for the thumbnail and original image.
const config = {
action: 'read',
expires: '03-01-2500'
};
const bucket = gcs.bucket(event.data.bucket);
const filePath = event.data.name;
const file = bucket.file(filePath);
file.getSignedUrl(config, function(err, fileURL) {
console.log(fileURL);
admin.database().ref('images').push({
src: fileURL
});
});
});
전체 코드: https://gist.github.com/bossly/fb03686f2cb1699c2717a0359880cf84
노드 J의 경우 이 코드를 사용했습니다.
const Storage = require('@google-cloud/storage');
const storage = new Storage({projectId: 'PROJECT_ID', keyFilename: 'D:\\keyFileName.json'});
const bucket = storage.bucket('project.appspot.com'); //gs://project.appspot.com
bucket.getFiles().then(results => {
const files = results[0];
console.log('Total files:', files.length);
files.forEach(file => {
file.download({destination: `D:\\${file}`}).catch(error => console.log('Error: ', error))
});
}).catch(err => {
console.error('ERROR:', err);
});
실제로 이것은 Firebase의 API 대신 Google Cloud API를 사용해야만 가능합니다.Firebase 스토리지는 Google Cloud API를 사용하여 쉽게 액세스할 수 있는 Google Cloud 스토리지 버킷이지만 Firebase 스토리지 버킷 대신 OAuth for Authentication을 사용해야 하기 때문입니다.
#In Python
import firebase_admin
from firebase_admin import credentials
from firebase_admin import storage
import datetime
import urllib.request
def image_download(url, name_img) :
urllib.request.urlretrieve(url, name_img)
cred = credentials.Certificate("credentials.json")
# Initialize the app with a service account, granting admin privileges
app = firebase_admin.initialize_app(cred, {
'storageBucket': 'YOURSTORAGEBUCKETNAME.appspot.com',
})
url_img = "gs://YOURSTORAGEBUCKETNAME.appspot.com/"
bucket_1 = storage.bucket(app=app)
image_urls = []
for blob in bucket_1.list_blobs():
name = str(blob.name)
#print(name)
blob_img = bucket_1.blob(name)
X_url = blob_img.generate_signed_url(datetime.timedelta(seconds = 300), method='GET')
#print(X_url)
image_urls.append(X_url)
PATH = ['Where you want to save the image']
for path in PATH:
i = 1
for url in image_urls:
name_img = str(path + "image"+str(i)+".jpg")
image_download(url, name_img)
i+=1
JavaScript 솔루션을 위해 Rosario Pereira Fernandes의 답변을 확장합니다.
- 컴퓨터에 방화벽 설치
npm install -g firebase-tools
- 화재 기지 초기화 세트
JavaScript
언어로 - 생성된 프로젝트의 루트 폴더에서 npm 설치 실행
npm install --save firebase
npm install @google-cloud/storage
npm install @google-cloud/firestore
... <any other dependency needed>
- 다음과 같이 프로젝트에 기본이 아닌 종속성 추가
"firebase": "^6.3.3",
"@google-cloud/storage": "^3.0.3"
기능/패키지제이손
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"lint": "eslint .",
"serve": "firebase serve --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "10"
},
"dependencies": {
"@google-cloud/storage": "^3.0.3",
"firebase": "^6.3.3",
"firebase-admin": "^8.0.0",
"firebase-functions": "^3.1.0"
},
"devDependencies": {
"eslint": "^5.12.0",
"eslint-plugin-promise": "^4.0.1",
"firebase-functions-test": "^0.1.6"
},
"private": true
}
- 의 종의생을 .
listAll
를 수행
index.js
var serviceAccount = require("./key.json");
const functions = require('firebase-functions');
const images = require('./images.js');
var admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://<my_project>.firebaseio.com"
});
const bucket = admin.storage().bucket('<my_bucket>.appspot.com')
exports.getImages = functions.https.onRequest((request, response) => {
images.getImages(bucket)
.then(urls => response.status(200).send({ data: { urls } }))
.catch(err => console.error(err));
})
images.js
module.exports = {
getImages
}
const query = {
directory: 'images'
};
function getImages(bucket) {
return bucket.getFiles(query)
.then(response => getUrls(response))
.catch(err => console.error(err));
}
function getUrls(response) {
const promises = []
response.forEach( files => {
files.forEach (file => {
promises.push(getSignedUrl(file));
});
});
return Promise.all(promises).then(result => getParsedUrls(result));
}
function getSignedUrl(file) {
return file.getSignedUrl({
action: 'read',
expires: '09-01-2019'
})
}
function getParsedUrls(result) {
return JSON.stringify(result.map(mediaLink => createMedia(mediaLink)));
}
function createMedia(mediaLink) {
const reference = {};
reference.mediaLink = mediaLink[0];
return reference;
}
- 실행합니다.
firebase deploy
- 앱에서 사용자 지정 기능 호출
빌드.그래들
dependencies {
...
implementation 'com.google.firebase:firebase-functions:18.1.0'
...
}
코틀린 수업
private val functions = FirebaseFunctions.getInstance()
val cloudFunction = functions.getHttpsCallable("getImages")
cloudFunction.call().addOnSuccessListener {...}
이 기능의 추가 개발과 관련하여 여기서 발견할 수 있는 몇 가지 문제에 부딪혔습니다.
는 사용중을 하고 있습니다.AngularFire
그리고 모든 것을 잊기 위해 다음을 사용합니다.downloadURL
getPhotos(id: string): Observable<string[]> {
const ref = this.storage.ref(`photos/${id}`)
return ref.listAll().pipe(switchMap(list => {
const calls: Promise<string>[] = [];
list.items.forEach(item => calls.push(item.getDownloadURL()))
return Promise.all(calls)
}));
}
저도 같은 문제에 직면했습니다. 제 문제는 훨씬 더 복잡합니다.
관리자가 오디오 및 PDF 파일을 저장소에 업로드합니다.
오디오/시즌1, 시즌2.../class1, 클래스2/.mp3 파일
책/pdf 파일
Android 앱은 하위 폴더 및 파일 목록을 가져와야 합니다.
솔루션은 스토리지에서 업로드 이벤트를 캡처하고 클라우드 기능을 사용하여 파이어스토어에서 동일한 구조를 생성하는 것입니다.
1단계: Firestore에서 수동으로 '스토리지' 컬렉션 및 '오디오/북' 문서 생성
2단계: 클라우드 기능 설정
약 15분 정도 걸릴 수 있음: https://www.youtube.com/watch?v=DYfP-UIKxH0&list=PLl-K7zZEsYLkPZHe41m4jfAxUi0JjLgSM&index=1
3단계: 클라우드 기능을 이용한 업로드 이벤트 포착
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp(functions.config().firebase);
const path = require('path');
export const onFileUpload = functions.storage.object().onFinalize(async (object) => {
let filePath = object.name; // File path in the bucket.
const contentType = object.contentType; // File content type.
const metageneration = object.metageneration; // Number of times metadata has been generated. New objects have a value of 1.
if (metageneration !== "1") return;
// Get the file name.
const fileName = path.basename(filePath);
filePath = filePath.substring(0, filePath.length - 1);
console.log('contentType ' + contentType);
console.log('fileName ' + fileName);
console.log('filePath ' + filePath);
console.log('path.dirname(filePath) ' + path.dirname(filePath));
filePath = path.dirname(filePath);
const pathArray = filePath.split("/");
let ref = '';
for (const item of pathArray) {
if (ref.length === 0) {
ref = item;
}
else {
ref = ref.concat('/sub/').concat(item);
}
}
ref = 'storage/'.concat(ref).concat('/sub')
admin.firestore().collection(ref).doc(fileName).create({})
.then(result => {console.log('onFileUpload:updated')})
.catch(error => {
console.log(error);
});
});
4단계: Firestore를 사용하여 Android 앱에서 폴더/파일 목록 검색
private static final String STORAGE_DOC = "storage/";
public static void getMediaCollection(String path, OnCompleteListener onCompleteListener) {
String[] pathArray = path.split("/");
String doc = null;
for (String item : pathArray) {
if (TextUtils.isEmpty(doc)) doc = STORAGE_DOC.concat(item);
else doc = doc.concat("/sub/").concat(item);
}
doc = doc.concat("/sub");
getFirestore().collection(doc).get().addOnCompleteListener(onCompleteListener);
}
5단계: 다운로드 URL 가져오기
public static void downloadMediaFile(String path, OnCompleteListener<Uri> onCompleteListener) {
getStorage().getReference().child(path).getDownloadUrl().addOnCompleteListener(onCompleteListener);
}
메모
파이어스토어에서는 수집 목록 검색을 지원하지 않기 때문에 각 항목에 "하위" 수집을 넣어야 합니다.
해결책을 찾는 데 3일이 걸렸는데, 기껏해야 3시간이 걸릴 것으로 예상됩니다.
JS에서 이 작업을 수행하려면
div 컨테이너에 직접 추가하거나 배열에 푸시할 수 있습니다.아래는 div에 추가하는 방법을 보여줍니다.
이미지를 저장소에 저장할 때 다음 구조를 사용하여 Firebase 데이터베이스의 이미지에 대한 참조를 생성합니다.
/images/(imageName){
description: "" ,
imageSrc : (imageSource)
}
문서를 로드할 때 다음 코드가 있는 저장소가 아닌 데이터베이스에서 모든 이미지 소스 URL을 꺼냅니다.
$(document).ready(function(){
var query = firebase.database().ref('images/').orderByKey();
query.once("value").then(function(snapshot){
snapshot.forEach(function(childSnapshot){
var imageName = childSnapshot.key;
var childData = childSnapshot.val();
var imageSource = childData.url;
$('#imageGallery').append("<div><img src='"+imageSource+"'/></div>");
})
})
});
다음 코드를 사용할 수 있습니다.여기서 이미지를 Firebase 저장소에 업로드한 다음 이미지 다운로드 URL을 Firebase 데이터베이스에 저장합니다.
//getting the storage reference
StorageReference sRef = storageReference.child(Constants.STORAGE_PATH_UPLOADS + System.currentTimeMillis() + "." + getFileExtension(filePath));
//adding the file to reference
sRef.putFile(filePath)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
//dismissing the progress dialog
progressDialog.dismiss();
//displaying success toast
Toast.makeText(getApplicationContext(), "File Uploaded ", Toast.LENGTH_LONG).show();
//creating the upload object to store uploaded image details
Upload upload = new Upload(editTextName.getText().toString().trim(), taskSnapshot.getDownloadUrl().toString());
//adding an upload to firebase database
String uploadId = mDatabase.push().getKey();
mDatabase.child(uploadId).setValue(upload);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
progressDialog.dismiss();
Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_LONG).show();
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
//displaying the upload progress
double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
progressDialog.setMessage("Uploaded " + ((int) progress) + "%...");
}
});
이제 파이어베이스 데이터베이스에 저장된 모든 이미지를 가져오십시오.
//adding an event listener to fetch values
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
//dismissing the progress dialog
progressDialog.dismiss();
//iterating through all the values in database
for (DataSnapshot postSnapshot : snapshot.getChildren()) {
Upload upload = postSnapshot.getValue(Upload.class);
uploads.add(upload);
}
//creating adapter
adapter = new MyAdapter(getApplicationContext(), uploads);
//adding adapter to recyclerview
recyclerView.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
progressDialog.dismiss();
}
});
자세한 내용은 제 포스트 Firebase 스토리지 예제를 참조하십시오.
인 스위프트
public func downloadData() async {
let imagesRef = storage.child("pictures/")
do {
let storageReference = try await storage.root().child("pictures").listAll()
print("storageReference: \(storageReference.items)")
} catch {
print(error)
}
}
산출량
[
gs://<your_app_name>.appspot.com/pictures/IMG_1243.JPG,
gs://<your_app_name>.appspot.com/pictures/IMG_1244.JPG,
gs://<your_app_name>.appspot.com/pictures/IMG_1245.JPG,
gs://<your_app_name>.appspot.com/pictures/IMG_1246.JPG
]
그래서 저는 파이어베이스 스토리지에서 자산을 다운로드해야 하는 프로젝트가 있었습니다. 그래서 저는 이 문제를 직접 해결해야 했습니다.방법:
1- 먼저 모형 데이터를 만듭니다.class Choice{}
하므로 string 변수는 .
class Choice {
.....
String imageName;
}
2 - 데이터베이스/파이어베이스 데이터베이스에서 이미지 이름을 개체에 하드코드합니다. 따라서 Apple.png이라는 이미지 이름을 가진 경우 개체를 만듭니다.
Choice myChoice = new Choice(...,....,"Apple.png");
3- 이제 파이어베이스 스토리지에 있는 자산에 대한 링크를 가져옵니다.
gs://your-project-name.appspot.com/
4- 마지막으로, Firebase 스토리지 참조를 초기화하고 파일을 가져오기 시작합니다.
storageRef = storage.getReferenceFromUrl(firebaseRefURL).child(imagePath);
File localFile = File.createTempFile("images", "png");
storageRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
//Dismiss Progress Dialog\\
}
5- 그게 다야
Android의 경우 Firebase를 사용하는 것이 가장 좋습니다.UI와 글라이드.
라이브러리를 가져오려면 Gradle/App에 추가해야 합니다.여기에는 이미 글라이드가 있습니다!
implementation 'com.firebaseui:firebase-ui-storage:4.1.0'
그런 다음 코드에서 사용합니다.
// Reference to an image file in Cloud Storage
StorageReference storageReference = FirebaseStorage.getInstance().getReference();
// ImageView in your Activity
ImageView imageView = findViewById(R.id.imageView);
// Download directly from StorageReference using Glide
// (See MyAppGlideModule for Loader registration)
GlideApp.with(this /* context */)
.load(storageReference)
.into(imageView);
언급URL : https://stackoverflow.com/questions/37335102/how-to-get-a-list-of-all-files-in-cloud-storage-in-a-firebase-app
'programing' 카테고리의 다른 글
사용자가 Fx 버튼을 클릭할 때 기본 엑셀 기능처럼 설명을 제공하는 UDF를 만드는 방법이 있습니까? (0) | 2023.06.11 |
---|---|
유형 스크립트: 구성원에 대한 밑줄 규칙 (0) | 2023.06.11 |
vba를 사용하여 모듈에서 프로그래밍 방식으로 양식 만들기 (0) | 2023.06.11 |
typescript에서 node-config를 사용하는 방법은 무엇입니까? (0) | 2023.06.11 |
vuex '상수' 명명된 작업을 변수와 함께 참조하려면 어떻게 해야 합니까? (0) | 2023.06.11 |