列表视图上的Firebase下载文件

时间:2018-02-15 20:16:22

标签: android firebase firebase-storage downloadfile

我正在制作一个应用程序列出上传的文件,然后我想用setOnItemLongClickListener下载它们。我得到下载网址并使用它来获取下载过程的参考。当我点击listview项目时,它说下载是成功的。但我在手机上看不到该文件。实际上我不知道应该在哪里。 我看到了类似的问题,但我找不到解决方案。我真的需要帮助来解决这个问题。

这是我的代码:

 listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

        public boolean onItemLongClick(AdapterView<?> arg0, View v,
                                       int index, long arg3) {


            try {
           storage = FirebaseStorage.getInstance().getReferenceFromUrl(fileFirebase.get(index).toString());


                StorageReference island=storage;

               final File file = File.createTempFile("images", "jpg");
                island.getFile(file).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
                        Toast.makeText(getActivity(),"Download is succesful!",Toast.LENGTH_LONG).show();

                    }
                }).addOnProgressListener(new OnProgressListener<FileDownloadTask.TaskSnapshot>() {
                    @Override
                    public void onProgress(FileDownloadTask.TaskSnapshot taskSnapshot) {
                        //taskSnapshot.getBytesTransferred();
                        //taskSnapshot.getTotalByteCount();
                    }
                });}
             catch (IOException e) {
                e.printStackTrace();
            }

2 个答案:

答案 0 :(得分:1)

File.createTempFile将该文件存储在Android的内部缓存目录中。

您应该new File代替它,它将在您的应用程序目录范围内可用。

如果您使用的是root设备或模拟器,则可以查看/data/data/<package-name>以查看下载的文件。

如果没有root,您可以浏览ADB shell到此位置。在Android Studio 3中,您有一个内置的文件浏览器来浏览应用程序的内部数据目录/data/data/<package-name>

您也可以考虑将文件存储在外部存储器中。为此,您需要在Manifest文件中声明权限。

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}

点击此链接了解详情:https://developer.android.com/training/data-storage/files.html

答案 1 :(得分:1)

您可以使用Environment.getExternalStoragePublicDirectory在设备上获取下载目录,请参阅下文...,

对于Firebase云存储 - 文件上传,下载和删除示例,您可以看到http://www.zoftino.com/firebase-cloud-storage-upload-download-delete-files-android-example#download-file

String DOWNLOAD_DIR = Environment.getExternalStoragePublicDirectory
            (Environment.DIRECTORY_DOWNLOADS).getPath();


  StorageReference storageRef = firebaseStorage.getReference();
        StorageReference downloadRef = storageRef.child(storageFile);
        File fileNameOnDevice = new File(DOWNLOAD_DIR+"/"+fileName);

        downloadRef.getFile(fileNameOnDevice).addOnSuccessListener(
                new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
                Log.d("File download", "downloaded the file");

            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                Log.e("File download", "Failed to download the file");

            }
        });