我已将一些文件上传到Firebase目录中,我想列出它们并逐个下载。这里没有API /文档。你能帮帮我吗?
答案 0 :(得分:0)
首先,您应该获取文件下载Url来检索它,最简单的方法是上传文件并在您的数据库中生成下载Url,所以之后您只需从存储中检索每个文件,如下所示: / p>
private void downloadFile() {
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReferenceFromUrl("<your_bucket>");
StorageReference islandRef = storageRef.child("file.txt");
File rootPath = new File(Environment.getExternalStorageDirectory(), "file_name");
if(!rootPath.exists()) {
rootPath.mkdirs();
}
final File localFile = new File(rootPath,"imageName.txt");
islandRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
Log.e("firebase ",";local tem file created created " +localFile.toString());
// updateDb(timestamp,localFile.toString(),position);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
Log.e("firebase ",";local tem file not created created " +exception.toString());
}
});
}
答案 1 :(得分:0)
我个人使用此方法,无论何时上传文件,将其下载URL保存在Firebase数据库中,如果要上传多个文件,请将其保存在数组中。 Firebase Storage没有方法可以一次下载和上传多个文件。 无论何时您想下载文件,都要访问您的firebase数据库以获取这些URL。
答案 2 :(得分:0)
截至2019年7月,Cloud Storage SDK的version 18.1.0现在支持列出存储桶中的所有对象。您只需要在const App = (props) => {
const { authState, authData } = props;
const [signedIn, setSignedIn] = useState(false);
const [userInfo, setUserInfo] = useState(undefined);
const [userInSystem, setUserInSystem] = useState(false);
useEffect(() => {
setSignedIn(!(authState !== 'signedIn'));
const fetchUser = async () => {
const data = await getUserInfo();
const userFound = await getUserByWorkEmail(data);
setUserInSystem(userFound);
setUserInfo(data);
};
if (authState === 'signedIn') {
fetchUser();
}
}, [authState]);
return (
<div>
<BrowserRouter>
<Switch>
<Redirect
exact={true}
path="/"
to={userInSystem ? '/dashboard' : '/unverified'}
/>
</Switch>
</BrowserRouter>
</LayoutProvider>
</div>
);
};
中调用listAll()
:
StorageReference
如果要下载这些文件,可以使用options shown in the Docs之一。
请注意,要使用此方法,您必须选择加入version 2 of Security Rules,这可以通过将StorageReference storageRef = FirebaseStorage.getInstance().getReference();
// Now we get the references of these images
storageRef.listAll().addOnSuccessListener(new OnSuccessListener<ListResult>() {
@Override
public void onSuccess(ListResult result) {
for(StorageReference fileRef : result.getItems()) {
// TODO: Download the file using its reference (fileRef)
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception exception) {
// Handle any errors
}
});
设置为安全规则的第一行来完成:
rules_version = '2';