从Android中的Firebase存储下载图像

时间:2018-09-02 11:13:01

标签: android firebase firebase-storage

因此,我尝试从Firebase存储下载图像。我尝试按照Firebase在其网站上推荐的方式进行操作。在下面的代码中,我向您展示我的代码,但是有问题。下载图像时,我有一个OnSuccessListener。我对其应用了一个Log.d,所以我知道它被触发了。但是我找不到尝试下载到智能手机上的图像。

这是我的代码:

StorageReference storageReference = FirebaseStorage.getInstance().getReferenceFromUrl(photoURL);

final File imageFile = new File(Environment.getExternalStorageDirectory()
                         .getAbsolutePath() + "/MyFolder/");

storageReference.getFile(imageFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
     holder.progressBar.setVisibility(View.GONE);
     holder.downloadBtn.setVisibility(View.GONE);
 }
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
     holder.progressBar.setVisibility(View.GONE);
     holder.downloadBtn.setVisibility(View.VISIBLE);
}
}).addOnProgressListener(new OnProgressListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onProgress(FileDownloadTask.TaskSnapshot taskSnapshot) {
     int progress = (int) ((100 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount());
     holder.progressBar.setProgress(progress);
}
});

1 个答案:

答案 0 :(得分:0)

我看到您没有将I.T保存为图像文件。

尝试一下

@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
     holder.progressBar.setVisibility(View.GONE);
     holder.downloadBtn.setVisibility(View.GONE);

    String filename = "yourfilename.png";
    File sd = Environment.getExternalStorageDirectory(); //You might wanna add something to sd that leads to your preferred path e.g /DCIM or /camera.
    File dest = new File(sd, filename);

    Bitmap bmp = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
    try {
         FileOutputStream out = new FileOutputStream(dest);
         bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
         out.flush();
         out.close();
    } catch (Exception e) {
         e.printStackTrace();
    }
 }

更好地替换

final File imageFile = new File(Environment.getExternalStorageDirectory()
                     .getAbsolutePath() + "/MyFolder/");

与此:

final File imageFile= File.createTempFile("images", "jpg");