是否可以在Firebase Storage中手动上传 PDF 文件(通过网络浏览器),然后通过Android应用程序下载?
另外,我是否需要对用户(移动应用程序)进行身份验证才能下载文件?
我们的想法是拥有一个" admin"将上传文件和拥有移动应用的所有其他用户不应该对Firebase了解任何内容,他们的应用程序应该做的就是,如果有Internet连接,请检查是否有新文件要下载。
答案 0 :(得分:1)
是否可以在Firebase存储中手动上传PDF文件(通过Web浏览器)并通过Android应用程序下载它们?
是的,您可以使用Firebase控制台手动上传PDF文件。但是,要使用Android应用程序访问该文件,您需要知道其文件名并完整参考。
另外,我是否必须为用户(移动应用程序)进行身份验证才能下载文件?
没有必要,尽管建议仅允许经过身份验证的访问。您可以通过更改Firebase存储信息中心中的Security Rules来配置此功能。 示例规则:
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
// CHOOSE EITHER ONE FROM THESE
allow read, write: if request.auth != null; // requires authentication
allow read, write: if true; // doesn't require authentication
}
}
}
他们应用程序应该做的是,如果有Internet连接,请检查是否有新文件要下载
目前,Firebase存储不提供API来获取存储在引用下的所有文件的列表。因此,您无法直接访问存储桶中的文件列表。
您可以使用建议here的此方法使用Firebase实时数据库存储存储中存在的文件元数据(下载URL)。请注意,当您上传要列出的文件时,您必须向实时数据库添加(删除)企业。
将文件上传到存储空间:
Uri file = Uri.fromFile(new File("path/to/your_pdf.jpg"));
StorageReference pdfRef = storageRef.child("pdfs/"+file.getLastPathSegment());
UploaduploadTask = pdfRef.putFile(file);
// Register observers to listen for when the download is done or if it fails
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
Uri downloadUrl = taskSnapshot.getDownloadUrl();
// ADD TO REALTIME DATABASE TOO.
addPdfToRealtimeDatabase(downloadUrl);
}
}); // you might also want to add an onFailure listener.
下载代码:将ChildEventListener
设置为数据库引用中的pdfs
。
ChildEventListener childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
String fileName = dataSnapshot.getKey();
String downloadUrl = dataSnapshot.getValue(String.class);
// Add pdf to the display list.
// displayList contains urls of pdfs to be downloaded.
displayList.add(downloadUrl);
}
// Other methods of ChildEventListener go here
};
pdfRef.addChildEventListener(childEventListener);
您可以使用displayList
下载所有可用的PDF并显示它们。
注意:我已经修改了firebase文档中的代码段。
答案 1 :(得分:1)
我是否需要对用户(移动应用)进行身份验证才能下载文件?
将文件上传到Cloud Storage for Firebase时,会为该文件生成所谓的“下载URL”。下载URL是一个不可访问的URL,它提供对文件的只读访问权限。这非常适合与Android应用的用户分享。
有关如何在上传时获取文件下载网址的示例,请查看此section of the Firebase documentation。