簡體   English   中英

如何從 firebase 存儲中的下載鏈接獲取文件名?

[英]How to get file name from download link in firebase storage?

我有圖像視圖,它使用下載鏈接使用 Glide 加載圖像。 代碼如下:

如何從下載 url 中獲取存儲在 fire base 存儲中的文件名?

Glide.with(ct)
  .load(downloadurllink)
  .centerCrop();

placeholder(R.drawable.common_icon_dark)
  .into(holder.image);

我遇到了同樣的問題,我使用正則表達式從下載 URL 中提取文件名

%2..*%2F(.*?)\\?alt

例如:如果您的下載網址是https://firebasestorage.googleapis.com/v0/b/art-track.appspot.com/o/images%2Fu1nffdGQ7QPLIMp7N11vSOYorUM2%2FCapture.JPG?alt=media&token=86081f67-9065-4a13-aa0b-14fab7d44bf3 ,通過使用%2..*%2F(.*?)\\?alt你可以提取“Capture.JPG”

如果 URL 是這種模式:

https://firebasestorage.googleapis.com/v0/b/art-track.appspot.com/o/images%2Fu1nffhbfdjsa%2FN11vSOYorUM2%2FImageName.JPG?alt=media&token=86081f67-9065-4a13-4bdb00

然后這將有助於將 URL 拆分為從 2F 到 2F 的模式,並將刪除擴展名(.jpg 或 .png)

String url="https://firebasestorage.googleapis.com/v0/b/art-                     
track.appspot.com/o/images%2Fu1nffhbfdjsa%2FN11vSOYorUM2%2FImageName.JPG? 
alt=media&token=86081f67-9065-4a13-aa0b-14fab7d44bf3";

print(url.split(RegExp(r'(%2F)..*(%2F)'))[1].split(".")[0]);

您可以使用 name 屬性輕松獲取文件名。 例子:

val httpsReference = FirebaseStorage.getInstance().getReferenceFromUrl("https://firebasestorage.googleapis.com/v0/b/art-                     
track.appspot.com/o/images%2Fu1nffhbfdjsa%2FN11vSOYorUM2%2FImageName.JPG? 
alt=media&token=86081f67-9065-4a13-aa0b-14fab7d44bf3")

Log.d(TAG, "filename: ${httpsReference.name}")

有很多選擇。 其中兩個最常用的是:

1.您可以使用 Firebase Storage 中的File Metadata從 URL 獲取文件名。 基本上,您創建一個 Firebase 數據引用,然后添加一個文件元數據偵聽器,如下所示:

    // Create a storage reference from our app
    StorageReference storageRef = storage.getReference();

    // Get reference to the file
    StorageReference fileRef = storageRef.child("images/forest.jpg");

    fileRef.getMetadata().addOnSuccessListener(new OnSuccessListener<StorageMetadata>() {
        @Override
        public void onSuccess(StorageMetadata storageMetadata) {
            String filename = storageMetadata.getName();
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
        // Uh-oh, an error occurred!
        }
    });

此代碼取自我建議您查看的文檔: 文件元數據

2.另一種選擇是將您的 URL 與名稱一起存儲在Firebase Database 這具有避免不必要的偵聽器的優點。 這意味着您可以使用單值事件偵聽器獲取名稱,而無需加載所有文件元數據。

    database.child("files").child("url")
    .addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
              String name = dataSnapShot.getValue(String.class);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    }

這取決於您想要如何實現。 希望能幫助到你 :)

最簡單的方法是使用引用方法:

let storage = Storage.storage()
let yourFirestoreURL = "https://firebasestorage.googleapis.com/v0/b/art-track.appspot.com/o/images%2Fu1nffdGQ7QPLIMp7N11vSOYorUM2%2FCapture.JPG?alt=media&token=86081f67-9065-4a13-aa0b-14fab7d44bf3"
let storageRef = storage.reference(forURL: yourFirestoreURL)

print(storageRef.name)

有關更多詳細信息,請參閱此處的 google 指南: https : //firebase.google.com/docs/storage/ios/create-reference

var storageReference =
      firebase_storage.FirebaseStorage.instance.refFromURL(url);
  String imgName = storageReference.name;
  print(imgName);
  

如果要刪除具有 url 的文件,可以執行以下操作:

final httpsReference = FirebaseStorage.instance.refFromURL(url);

await FirebaseStorageService.deleteFile(httpsReference.fullPath);

iOS解決方案!

    NSError *error = NULL;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"%2F(.*?)\\?alt" options:NSRegularExpressionCaseInsensitive error:&error];
    NSArray *matches = [regex matchesInString:photo_url options:0 range:NSMakeRange(0, [photo_url length])];
    if (matches && matches.count > 0) {
        NSString *substringForFirstMatch = [photo_url substringWithRange:[matches[0] rangeAtIndex:1]];
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM