如何检测Firebase url是照片还是视频-Swift
我一直在想如何检测我从Firebase存储中检索到的如何检测Firebase url是照片还是视频-Swift,swift,firebase,url,google-cloud-firestore,firebase-storage,Swift,Firebase,Url,Google Cloud Firestore,Firebase Storage,我一直在想如何检测我从Firebase存储中检索到的url是照片还是视频 我遵循了这一点,但它似乎不适用于Firebase存储URL 该问题中实现的解决方案仅在url末尾具有扩展名时才起作用。 这是我实现的代码: extension String { public func isImageType() -> Bool { // image formats which you want to check let imageFormats = ["jpg",
url
是照片还是视频
我遵循了这一点,但它似乎不适用于Firebase存储URL
该问题中实现的解决方案仅在url末尾具有扩展名时才起作用。
这是我实现的代码:
extension String {
public func isImageType() -> Bool {
// image formats which you want to check
let imageFormats = ["jpg", "png", "gif"]
if URL(string: self) != nil {
let extensi = (self as NSString).pathExtension
return imageFormats.contains(extensi)
}
return false
}
}
需要说明的是,从Firebase
检索到的url
具有此表单
照片url示例:
https://firebasestorage.googleapis.com/v0/b/myApp-1e48d.appspot.com/o/Images%2FD118DA58-C128-4E5E-BF24-AA820BEE5590.jpg?alt=media&token=49eie236-f9d1-45f8-bd0b-887382c61ccd
视频url示例:
https://firebasestorage.googleapis.com/v0/b/myApp-1e48d.appspot.com/o/Videos%2F1E4B7CA0-4D0E-4AC5-9856-2F59D0811C47.mp4?alt=媒体和令牌=615teacf-0d20-48aa-bb8f-cew84a14d76d
正如您所看到的,扩展
不在末尾(因为需要令牌),因此之前链接的扩展方法不起作用
我如何才能仍然理解从Firebase检索到的
url
是照片还是视频?我实现了一个代码:
删除“?”之后的所有内容:
图像类型
:
public func isImageType() -> Bool {
// image formats which you want to check
let imageFormats = ["jpg", "png", "gif"]
if URL(string: self) != nil {
let extensi = (self as NSString).pathExtension
return imageFormats.contains(extensi)
}
return false
}
您只需使用链接初始化url并获取路径扩展名:
let link1 = "https://firebasestorage.googleapis.com/v0/b/myApp-1e48d.appspot.com/o/Images%2FD118DA58-C128-4E5E-BF24-AA820BEE5590.jpg?alt=media&token=49eie236-f9d1-45f8-bd0b-887382c61ccd"
if let url = URL(string: link1) {
let fileType = url.pathExtension // "jpg"
}
let link2 = "https://firebasestorage.googleapis.com/v0/b/myApp-1e48d.appspot.com/o/Videos%2F1E4B7CA0-4D0E-4AC5-9856-2F59D0811C47.mp4?alt=media&token=615teacf-0d20-48aa-bb8f-cew84a14d76d"
if let url = URL(string: link2) {
let fileType = url.pathExtension // "mp4"
}
您可以非常轻松地删除查询字符串(问号后面的所有内容)并从此处解析扩展。或者你可以将媒体类型和URL一起存储在你使用的任何数据库中。从技术上讲,这段代码没有错。然而。如果存储格式发生更改,它可能会中断。更好的办法是按照道格在评论中的建议行事。只需将文件类型与url一起存储为另一个字段-它也将减少一个扩展名和更少的代码。我不知道如何实现它,您能向我详细解释一下吗?我从存储参考下载了这个url,我不明白如何“将文件类型与url一起存储为另一个字段”@StackGU当在数据库中存储url时(如指南所示),您还具有存储文件类型、图像名称、时间戳、,哪个用户发布了它等等。你可以接近它,但是效果最好,但是利用数据库也有好处。@Jay OP发布说他的问题是试图从NSString获得路径扩展。解决方案是从URL获取简单的URL。当然你可以存储文件类型,但这不是问题所在。谢谢@Jay,实际上我在Firestore文档中存储了所有信息,所以Leo Dabus建议的简单解决方案在这里似乎很好,但他们没有将URL存储在任何地方(而不是存储在数据库中,通常是这样做的);他们试图直接从存储器中获取所有URL。@Jay OP说字符串是这样的。这就是他所需要的——是的,我只是想画一幅更大的图。
let link1 = "https://firebasestorage.googleapis.com/v0/b/myApp-1e48d.appspot.com/o/Images%2FD118DA58-C128-4E5E-BF24-AA820BEE5590.jpg?alt=media&token=49eie236-f9d1-45f8-bd0b-887382c61ccd"
if let url = URL(string: link1) {
let fileType = url.pathExtension // "jpg"
}
let link2 = "https://firebasestorage.googleapis.com/v0/b/myApp-1e48d.appspot.com/o/Videos%2F1E4B7CA0-4D0E-4AC5-9856-2F59D0811C47.mp4?alt=media&token=615teacf-0d20-48aa-bb8f-cew84a14d76d"
if let url = URL(string: link2) {
let fileType = url.pathExtension // "mp4"
}