我正在尝试从Firebase存储中下载文件。但是当我下载它时,它会给出一些.bin
扩展名的文件。但我想获得原始文件名。
这是我的代码。
try {
URL url = new URL(f_url[0]);
URLConnection conection = url.openConnection();
conection.connect();
int lenghtOfFile = conection.getContentLength();
InputStream input = new BufferedInputStream(url.openStream(),
8192);
OutputStream output = new FileOutputStream(Environment
.getExternalStorageDirectory().toString()
+"/Download/"+ URLUtil.guessFileName(f_url[0], null, null));
Log.i("File name",URLUtil.guessFileName(f_url[0], null, null));
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress("" + (int) ((total * 100) / lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {
Log.e("Error: ", e.getMessage());
}
在那里f_url
是firebase下载网址。谢谢。
答案 0 :(得分:0)
这样做的内置方式实际上非常简单:
StorageReference reference = storage.getReferenceFromUrl("https://firebasestorage.googleapis.com/...");
// Assuming that the file is "name.extension" in Storage
String name = reference.getName().split(".")[0]
String extension = reference.getName().split(".")[1]
File localFile = File.createTempFile(name, extension);
reference.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
// Local temp file has been created
}
});
但是,如果你不想这么简单的方式......
让我们简要了解一下您如何命名文件:URLUtil.guessFileName(f_url[0], null, null)
根据URLUtil.guessFileName()
文档:“使用URL和contentDisposition猜测下载可能具有的规范文件名。如果未定义,则根据mimetype添加文件扩展名。”
我假设您的f_url[0]
是一个没有扩展名的文件,并且因为您没有提供contentDisposition
或mimetype
作为guessFileName
的参数,所以我没办法可能知道你想要的文件扩展名。
您可以从Storage Metadata获取contentDisposition
和contentType
(与mimetype
相同),如果您使用扩展程序在存储中命名文件,那么您应该会很好去吧。