我正在构建(研究目的)类似于Snapchat的解决方案。想法是将图片发送给可以打开它的其他人。信息被保存到Firebase-Realtime-Database中,一旦被接收者单击,就会显示该图像。

我正在使用Xcode 11.2,Swift4,IOS13,macOS Catalina,SDWebImage(5.2.3)

override func viewDidLoad() {
super.viewDidLoad()

details.text = snap.description

let url = URL(fileURLWithPath: snap.urlImage)
print("URL 1 \(url) - end")
print("URL 2 \(snap.urlImage) - end")

imagem.sd_setImage(with: url) { (image, error, cache, url) in
 print("Message 1")
}

}


保存到Firebase的URL可以正常使用(我可以将其复制/粘贴到浏览器中并下载图片)。

以下是上面代码的结果:
print(“ URL 1(url)-end”)结果
https:/firebasestorage.googleapis.com/v0/b/snapchat-xxxxx.appspot.com/o/images%252FBA5008FB-7D2E-4091-B995-E37879EAB1A2.jpg%3Falt=media&token=72146333-fe8e-4add-be52-1caf037cd1d6 -文件:///-结束

print(“ URL 2(snap.urlImage)-结束”)
https://firebasestorage.googleapis.com/v0/b/snapchat-xxxxx.appspot.com/o/images%2FBA5008FB-7D2E-4091-B995-E37879EAB1A2.jpg?alt=media&token=72146333-fe8e-4add-be52-1caf037cd1d6-结束

如您所见,在使用URL(fileURLWithPath:snap.urlImage)之后,将“-file:///”添加到“ url”常量的末尾。

如果我在sd_setImage行中用snap.urlImage替换url则不起作用(imagem.sd_setImage(with:snap.urlImage)...)

任何人都会知道发生了什么事吗?

谢谢

最佳答案

init(fileURLWithPath path: String)



  初始化引用本地文件的新创建的文件URL,或者
  路径目录


init(fileURLWithPath :)将传入的字符串解释为我不想要的本地文件路径。例如,如果您想将该文件写入本地磁盘,则可以使用该文件。

您实际上正在寻找的是服务器上文件的url路径。

let urlToImage = URL(string: snap.urlImage)


请记住,这将返回一个可选内容,从而最好地像这样保护您的代码

if let urlToImage = URL(string: snap.urlImage) {
   imagem.sd_setImage(with: urlToImage)...
} else {
   print("could not find file at that url") //or some other error
}


另外,为了可读性,我建议使用不同的var名称... urlImage听起来像是Image或NSImage,而不是路径。 imageUrl是更好的名称,因为它是图像的网址。

09-11 05:44