2017-04-20 34 views
0

我试图从Firebase存储中下载文件。但是当我下载它时,它会给出一些扩展名为.bin的文件。但我想获得原始文件名称。如何从Firebase存储中以原始扩展名下载文件?

这是我的代码。

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是火力下载网址。谢谢。

+1

为什么不使用Firebase SDK?以下是我尝试过的文档https://firebase.google.com/docs/storage/android/download-files – wnieves19

+0

。首先我创建了文件localFile = File.createTempFile(“ayefile”,“”,getExternalFilesDir(null));然后将该文件添加到firebase本地下载功能。但我还没有得到延期。 :( – Doge

回答

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的下载文件的规范文件名,如果未定义,则根据MIME类型添加文件扩展名。

我假设你f_url[0]是一个没有扩展名的文件,因为你没有提供contentDispositionmimetype作为参数传递给guessFileName,有没有办法可以大概知道你想要的文件扩展名。

您可以从Storage Metadata得到contentDispositioncontentType(同mimetype),如果你的名字你的存储与扩展文件,你应该是好去。

+0

只是为了澄清,如果该文件没有上传扩展名是什么?有没有一种方法可以在本地tempFile创建之前获取扩展名为mime类型? –

+0

@AndrewLam您可以获取元数据,获取内容键入,维护查找表(或可能使用内置的MIME类型到扩展名映射),然后下载该文件并创建适当的扩展名。 –

相关问题