Android 从Firebase存储下载文件会更改其名称

Android 从Firebase存储下载文件会更改其名称,android,firebase,firebase-storage,Android,Firebase,Firebase Storage,每当我将文件从Firebase存储下载到Android设备时,文件名都会更改,即从filename.pdf更改为filename-13557732.pdf 有没有办法阻止这种变化?为什么会发生这种情况 File directory = new File(Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DOWNLOADS).getAbsolutePath()); final File localF

每当我将文件从Firebase存储下载到Android设备时,文件名都会更改,即从filename.pdf更改为filename-13557732.pdf

有没有办法阻止这种变化?为什么会发生这种情况

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

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

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

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

答案是: 你不能

如果可以,您将使createTempFile的保证失效,根据javadoc,该保证是:

在调用此方法之前,由返回的抽象路径名表示的文件不存在,并且 在虚拟机的当前调用中,此方法及其任何变体都不会再次返回相同的抽象路径名。 如果您关心文件名,可能createTempFile()不是创建文件的合适方法

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

使用createTempFile的另一种策略取决于您使用该文件的目的,以及为什么您关心它的名称,而您不说明它的名称

问:有没有一种方法可以使用URL下载这个文件

答案是肯定的

有不同的方法可以做到这一点。检查

简单地说就是这样

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
    }
});
私有FirebaseStorage storageRef=FirebaseStorage.getInstance(); storageRef.child(“users/me/profile.png”).getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){ @凌驾 成功时的公共无效(Uri){ //已获取“users/me/profile.png”的下载URL } }).addOnFailureListener(新的OnFailureListener(){ @凌驾 public void onFailure(@NonNull异常){ //处理任何错误 } });
你可以使用,毕加索或滑翔。或者简单地创建自己处理URL的方法。它可能会说URI,但实际上是URL。

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

答案是: 你不能

如果可以,您将使createTempFile的保证失效,根据javadoc,该保证是:

在调用此方法之前,由返回的抽象路径名表示的文件不存在,并且 在虚拟机的当前调用中,此方法及其任何变体都不会再次返回相同的抽象路径名。 如果您关心文件名,可能createTempFile()不是创建文件的合适方法

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

使用createTempFile的另一种策略取决于您使用该文件的目的,以及为什么您关心它的名称,而您不说明它的名称

问:有没有一种方法可以使用URL下载这个文件

答案是肯定的

有不同的方法可以做到这一点。检查

简单地说就是这样

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
    }
});
私有FirebaseStorage storageRef=FirebaseStorage.getInstance(); storageRef.child(“users/me/profile.png”).getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){ @凌驾 成功时的公共无效(Uri){ //已获取“users/me/profile.png”的下载URL } }).addOnFailureListener(新的OnFailureListener(){ @凌驾 public void onFailure(@NonNull异常){ //处理任何错误 } });
你可以使用,毕加索或滑翔。或者简单地创建自己处理URL的方法。它可能会说URI,但实际上是URL。

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