下载时Firebase StorageException

时间:2017-05-25 10:24:52

标签: android firebase download firebase-storage

我一直在寻找这个问题,但我在这里找不到任何解决方案。我的问题是,当我将新项目发布到firebase存储时一切正常,但是当我尝试下载它时,目录文件夹已成功创建,但文件未下载,因为它向我显示此错误异常:

  

com.google.firebase.storage.StorageException:对象不存在于   位置

我的代码在这里:

  @Override
        public void onButtonDownloadClick(View view, final int position) {
            String name = list.get(position).getRemoteName();


            File storagePath = new File(Environment.getExternalStorageDirectory(), "FromFiles");
            // Create direcorty if not exists
            if(!storagePath.exists()) {
                storagePath.mkdirs();
            }

            final File myFile = new File(storagePath, list.get(position).getRemoteName());


            islandRef = storageReference.child(uid).child("files").child(name);


            islandRef.getFile(myFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
                    // Local temp file has been created
                    Toast.makeText(getActivity(), "Succeed", Toast.LENGTH_LONG).show();
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    // Handle any errors
                    Toast.makeText(getActivity(), exception.toString(), Toast.LENGTH_LONG).show();
                }
            });

        }
    });

按下按钮时,应下载文件,但只创建目录。

2 个答案:

答案 0 :(得分:2)

这是firebase下载的工作示例并检查下载路径,该对象应存在于存储桶中。

{{1}}

让我们假设你在photos文件夹中的image.jpg然后是downloadPath photos / image.jpg

答案 1 :(得分:1)

检查Firebase规则..!

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}




private FirebaseAuth mAuth;

    private FirebaseDatabase mdatabase;

    private DatabaseReference mdatabaseReference;




    StorageReference mFStorage;



    StorageReference filePath;


     mAuth = FirebaseAuth.getInstance();
            mdatabase = FirebaseDatabase.getInstance();
            mdatabaseReference = mdatabase.getReference();
            mFStorage= FirebaseStorage.getInstance().getReference();





    filePath=mFStorage.child("audio").child(audioId+".mp3");

            filePath.putFile(imageGalleryUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                    dialog.dismiss();

                    DownloadUrl=taskSnapshot.getDownloadUrl();

                    Log.d(TAG,"DownloadUrl.toString()");





                    //download link for file



                }
            });

然后使用下载管理器下载文件,如音频

Context ctx=MainActivty.this;

     DownloadManager downloadManager = (DownloadManager)ctx.getSystemService(DOWNLOAD_SERVICE);



                                                                    //Your Url here

            DownloadManager.Request request = new DownloadManager.Request(uri);
            request.setDescription("Downloading a file");
            long id =  downloadManager.enqueue(request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI |DownloadManager.Request.NETWORK_MOBILE)
                    .setAllowedOverRoaming(false)
                    .setTitle("File Downloading...")
                    .setDescription("Audio File Downloading...!")
                    .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "/Audio/"+audioName+".mp3"));