2017-04-25 43 views
3

從來就問了一個問題,以前從火力地堡的存儲,這是給我的答案得到將downloadURL是:火力地堡SignedURL不等於下載地址存儲

bucket.file(filename).getSignedUrl({ 
    action: 'read', 
    expires: '03-17-2025' 
}, function(err, url) { 
    if (err) { 
    console.error(err); 
    return; 
    } 

    // The file is now available to read from this URL. 
    request(url, function(err, resp) { 
    // resp.statusCode = 200 
    }); 
}); 

給出的是由以前的一個代碼在使用Glide下載圖像或使用ExoPlayer重新生成音頻或視頻文件時不起作用。

不過,我得到一個完全地不同的URL比由火力地堡存儲給出的,(至極做工作滑翔和ExoPlayer)當一個文件被上傳至極看起來是這樣的:

https://firebasestorage.googleapis.com/v0/b/project-PROYECT_NUMBER.appspot.com/o/Messages%2Fimages%2F-KUj4wvXXl6aj9XXXX%2F1493147111111?alt=media&token=TOKEN

我怎樣才能得到正確的downloadUrl,就像我在服務器端使用Android或iOS SDK所獲得的那樣?

回答

2

有沒有辦法讓服務器端的下載網址就像使用Android,iOS或Javascript SDK一樣。你必須通過調用getSignedUrl()來生成一個url。

您可能想要檢查是否有權讀取給定URL處的文件。

默認情況下,您必須進行身份驗證。

檢查存儲空間的規則在火力控制檯

https://firebase.google.com/docs/storage/security/#authorization

1

我希望你上傳的圖像通過應用程序只有吶?一旦上傳,你將獲得下載鏈接。我希望這會幫助你。

import com.google.firebase.storage.StorageTask; 

final StorageTask uploadTask = uplodedFileRef.putBytes(data); 
    Log.d(TAG, "uploadFilefromPath: " + uplodedFileRef.getPath().toString()); 
uploadTask.addOnFailureListener(new OnFailureListener() { 
       @Override 
       public void onFailure(@NonNull Exception exception) { 
        // Handle unsuccessful uploads 
        Toast.makeText(acty, "Upload Failed", Toast.LENGTH_SHORT).show(); 
        dialog.dismiss(); 
        sendResult(false, Uri.EMPTY); 
       } 
      }) 
      .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
        // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL. 
        Toast.makeText(acty, "Upload Successful", Toast.LENGTH_SHORT).show(); 
        dialog.dismiss(); 
        sendResult(true, taskSnapshot.getDownloadUrl()); 
       } 
      }) 
      .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { 

        int bytesTransferred = (int) taskSnapshot.getBytesTransferred(); 
        int totalBytes = (int) taskSnapshot.getTotalByteCount(); 
        int progress = (100 * bytesTransferred)/totalBytes; 

        Log.v(TAG, "Bytes transferred: " + taskSnapshot.getBytesTransferred()); 
        Log.v(TAG, "TotalBytes: " + totalBytes); 
        Log.v(TAG, "Upload is: " + progress + "% done"); 

        dialog.setContent("Upload in Progress"); 
        dialog.getProgressBar().setIndeterminate(false); 
        // double progress = (100.0 * taskSnapshot.getBytesTransferred())/taskSnapshot.getTotalByteCount(); 
        dialog.getProgressBar().setMax(totalBytes/1024); 
        dialog.setMaxProgress(totalBytes/1024); 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
         dialog.getProgressBar().setProgress(bytesTransferred/1024, true); 
         dialog.setProgress(bytesTransferred/1024); 
        } else 
         dialog.getProgressBar().setProgress(bytesTransferred/1024); 
        dialog.setProgress(bytesTransferred/1024); 
        // dialog.getProgressBar().setProgress((int) progress); 
       } 
      }); 
+0

的問題是,我在做,我想通過服務器 – Andrea

+0

看到我添加了一些答案看看它@Andrea – Techgeek

+0

我檢索網址很抱歉,但答案並不符合我所要求的內容,我需要在Firebase函數節點代碼 – Andrea

1
addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
     @Override 
     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { //success 
      sendResult(true, taskSnapshot.getDownloadUrl()); 
     } 
}) 

在這個taskSnapshot.getDownloadUrl()您將收到下載鏈接,然後將其保存火力數據庫可以能夠檢索作爲當

+0

我很抱歉,答案並不符合我所要求的內容,因此我需要在Firebase函數節點代碼 – Andrea

+0

中檢索該URL。使用上述方法,您應該將下載URL存儲在節點中,然後從該節點訪問該節點您的Firebase功能。 –