2017-04-20 63 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類型到擴展名映射),然後下載該文件並創建適當的擴展名。 –

相關問題