![](/img/trans.png)
[英]How to get file name from download link in firebase storage(Javascript, React)?
[英]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 是这种模式:
然后这将有助于将 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.