2017-08-08 47 views
1

每当我从Firebase存储将文件下载到Android设备时,文件的名称都会发生变化,即从filename.pdf更改为例如。文件名-13557732.pdf从Firebase存储中下载文件更改其名称

有什么办法可以防止这种改变?为什么会发生?

File directory = new File(Environment.getExternalStoragePublicDirectory 
    (Environment.DIRECTORY_DOWNLOADS).getAbsolutePath()); 

final File localFile = File.createTempFile(filename,".pdf", directory); 
mStorageReference.child(filename).getFile(localFile) 

另外,有没有办法下载带有URL(我已经拥有)而不是名称的文件?

+0

你如何下载?它是您开发的应用程序的一部分,还是以普通用户身份使用设备并触发系统下载管理器? –

+0

它是我开发的应用程序的一部分。 – Camille

回答

0

问:如何更改createTempFile中的默认名称?

答案: 你不行。

如果你能,你会失效createTempFile的担保,因此,根据javadoc的,分别是:

由返回的抽象路径名此方法之前不存在表示的文件被调用,并 无论这种方法也不它的任何变体将在当前的虚拟机调用中再次返回相同的抽象路径名。 如果您关心文件名,可能createTempFile()不是创建文件的适当方式。

您可以找出系统临时文件目录是什么,并在那里创建自己的文件,但是您必须自己管理文件名冲突的可能性。

使用createTempFile的另一种策略取决于您使用该文件的内容以及为什么您关心它的名称,您没有声明。

问:有没有办法使用URL下载此文件。

答案是的。

有不同的方法来做到这一点。检查This Documentation

所以简单地说吧。

private FirebaseStorage storageRef = FirebaseStorage.getInstance(); 



storageRef.child("users/me/profile.png").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() { 
    @Override 
    public void onSuccess(Uri uri) { 
     // Got the download URL for 'users/me/profile.png' 
    } 
}).addOnFailureListener(new OnFailureListener() { 
    @Override 
    public void onFailure(@NonNull Exception exception) { 
     // Handle any errors 
    } 
}); 

您可以使用,毕加索或滑翔。或者简单地创建你自己的方法来处理URL。它可能会说URI,但它确实是URL。