我需要显示用户在我的应用程序中拍摄的图像。我使用以下代码将它们存储在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();
}
但是,如果我在离线状态下“上传”图像时,似乎无法找回图像,这是有原因的,还是可以解决的?建议不胜感激。
答案 0 :(得分:0)
Cloud Storage for Firebase没有用于处理文件的“脱机”模式。它不像实时数据库和Firestore。您只能在线上下载文件,而不能下载在线上尚未完成上传的文件。如果您需要在脱机时处理文件,则应使用自己的本地缓存进行处理。