使用 url 从 firebase 下载图像到外部 sd 卡

Download image from firebase to external sd Card using url

我已经在我的 firebase 中上传了图像文件。我已将 url 存储到 firebase 数据库。在存储过程中,为了得到 url 我使用了 Uri downloadUri = taskSnapshot.getDownloadUrl(); 现在我想在单击按钮时从 url 下载该图像文件,并希望将该图像文件存储到 SD 卡的特定文件夹中,比如 "New Folder" 帮我写下面的代码....

FirebaseStorage mFirebaseStorage;
StorageReference httpsReference;

mFirebaseStorage = FirebaseStorage.getInstance();
httpsReference = mFirebaseStorage.getReferenceFromUrl(downloadUri);

Button b = findViewById(R.id.button);
b.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //what??
    }
});

您需要实施 FileDownloadTask; see this example.

Environment.getExternalStorageDirectory()是SD卡,可能需要申请权限android.permission.READ_EXTERNAL_STORAGE才能访问该路径。例如。 https://developer.android.com/training/data-storage/files.html

首先像这样创建数据库引用和文件

StorageReference downloadRef = FirebaseStorage.getInstance().getReference().child("Wall/" + category
            + "/" + wall_id + ".jpg");
    File localFile = null;
    try {
        String fileName = wall_id + ".jpg";
        localFile = new File();//create your file with desired path
    } catch (Exception e) {
        e.printStackTrace();
    }

比像这样在该引用上调用 getFile

downloadRef.getFile(localFile)
            .addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
                    dialog.dismiss();
                }
            }).addOnProgressListener(new OnProgressListener<FileDownloadTask.TaskSnapshot>() {
        @Override
        public void onProgress(FileDownloadTask.TaskSnapshot taskSnapshot) {}
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            Toast.makeText(WallOptionActivity.this, "Download failed!", Toast.LENGTH_SHORT).show();
        }
    });

文件将保存到指定路径。

考虑将 Picasso 用于您的目的。要将图像保存在外部磁盘上,您可以使用以下方法:

Picasso.with(mContext)
    .load(ImageUrl)
    .into(new Target() {
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
            try {
                String root = Environment.getExternalStorageDirectory().toString();
                File myDir = new File(root + "/yourDirectory");

                if (!myDir.exists()) {
                    myDir.mkdirs();
                }

                String name = new Date().toString() + ".jpg";
                myDir = new File(myDir, name);
                FileOutputStream out = new FileOutputStream(myDir);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);

                out.flush();
                out.close();                        
            } catch(Exception e){
                // some action
            }
        }

        @Override
        public void onBitmapFailed(Drawable errorDrawable) {
        }

        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {
        }
    }
);

From here 你可以下载这个库。 不要忘记在清单文件中添加权限