如何从Firebase存储下载具有原始扩展名的文件?

时间:2017-04-20 20:08:57

标签: android firebase firebase-storage

我正在尝试从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下载网址。谢谢。

1 个答案:

答案 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]是一个没有扩展名的文件,并且因为您没有提供contentDispositionmimetype作为guessFileName的参数,所以我没办法可能知道你想要的文件扩展名。

您可以从Storage Metadata获取contentDispositioncontentType(与mimetype相同),如果您使用扩展程序在存储中命名文件,那么您应该会很好去吧。