java - Android 访问 Firebase 云存储中的文件,同时仍处于离线状态
问题描述
我需要在我的应用程序中显示用户拍摄的图像。FirebaseFirestore
我使用以下代码存储它们:
StorageReference imagesRef = storage.getReference("images/"+device.ref+"/"+timeStamp+".png");
Bitmap bitmap = BitmapFactory.decodeFile(output.toString());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] image = baos.toByteArray();
UploadTask uploadTask = imagesRef.putBytes(image);
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
}
});
这很好用,当我离线然后我上网时,文件很好地自动上传到Storage
.
但是,即使在离线时,我仍然需要能够访问此图像。我使用以下代码正常访问图像:
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageReference = storage.getReference().child("images/"+device+"/"+image.getFilename());
try {
File localFile = File.createTempFile("images", "jpg");
localFile.deleteOnExit();
storageReference.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
Log.v("Download", "downloaded");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
}
});
} catch (IOException e) {
e.printStackTrace();
}
但是,如果我在离线时“上传”图像,我似乎无法取回它,这是有原因的,还是可以解决?建议非常感谢。
解决方案
Cloud Storage for Firebase 没有用于处理文件的“离线”模式。它不像实时数据库和 Firestore。在线时只能下载文件,在线时不能下载尚未上传的文件。如果您需要在离线时处理文件,您应该使用自己的本地缓存来处理。
推荐阅读
- javascript - 无需移除内部零件即可更换琴弦
- node.js - 如何直接在云端上传图片而不将其存储到本地目录中?
- javascript - 制作 DOM 元素的副本,然后添加动画
- python - Numpy:计算数组中索引出现的最佳方法
- java - 如何使用 Dto 类中的实体类进行映射并使用存储库来执行此操作,但我没有得到它
- docker - 适用于 Windows 容器的 Amazon Corretto 11 docker 映像
- reactjs - SVG在页面更改时变黑
- javascript - Dropzonejs度假村附加图像
- javascript - 验证验证码的自动化脚本
- mysql - Wordpress 在安装过程中显示空白页