我在使用Firebase存储和实时数据库的聊天应用程序上工作。我在我的数据库中有一个用户朋友树,每个用户在那里得到他的朋友列表:
我在存储中每个用户都有详细的照片,下载用户朋友的照片的最佳方式/逻辑是什么(到带有NSUrl的本地文件/在内存中使用NSData/生成URL),如果朋友修改他的照片,更重要的是要更新?感谢您的帮助!
用于存储图像
参数
信息图片:- 您
从 UI 图像拾取器
发送的图片的信息
完成块:- 上传完成时调用
func profilePictureUploading(infoOnThePicture : [String : AnyObject],completionBlock : (()->Void)) {
if let referenceUrl = infoOnThePicture[UIImagePickerControllerReferenceURL] {
print(referenceUrl)
let assets = PHAsset.fetchAssetsWithALAssetURLs([referenceUrl as! NSURL], options: nil)
print(assets)
let asset = assets.firstObject
print(asset)
asset?.requestContentEditingInputWithOptions(nil, completionHandler: { (ContentEditingInput, infoOfThePicture) in
let imageFile = ContentEditingInput?.fullSizeImageURL
print("imagefile : \(imageFile)")
let filePath = FIRAuth.auth()!.currentUser!.uid + "/\(Int(NSDate.timeIntervalSinceReferenceDate() * 1000))/\(imageFile!.lastPathComponent!)"
//Creating a unique path for the image in FIRStorage
print("filePath : \(filePath)")
//Storing under the parent Node `ProfilePictures` in FIRStorage FIRControllerClass.storageRef.child("ProfilePictures").child(filePath).putFile(imageFile!, metadata: nil, completion: {
(metadata, error) in
if error != nil{
print("error in uploading image : \(error)")
//Show alert
}
else{
print("metadata in : \(metadata!)")
print(metadata?.downloadURL())
print("The pic has been uploaded")
print("download url : \(metadata?.downloadURL())")
self.uploadSuccess(metadata!, storagePath: filePath)
completionBlock()
}
})
})
}else{
print("No reference URL found!")
}
}
//Storing the filepath to NSUserDefaults
//Much better option would be to store the pictures filePath or storagePath in the FIREBASE DATABASE ITSELF WITH THE USERS DETAILS
//And retrieve that storagePath every time you wanna download the image(much sound option)
func uploadSuccess(metadata : FIRStorageMetadata , storagePath : String)
{
print("upload succeded!")
print(storagePath)
NSUserDefaults.standardUserDefaults().setObject(storagePath, forKey: "storagePath.\((FIRAuth.auth()?.currentUser?.uid)!)")
NSUserDefaults.standardUserDefaults().synchronize()
}
用于检索图像
参数 :-
用户名:- 用户标识
完成 :- 完成用于处理图像检索完成的块
func retrieveStorageForUID( UID : String, completion : ((image : UIImage) -> Void) ){
print("initial storage")
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentDirectory = paths[0]
let filePath = "file:\(documentDirectory)/\(UID).jpg"
let filePath1 = "\(documentDirectory)/\(UID).jpg"
print(filePath)
print(filePath1)
//Again i am retrieving the storagePath from the NSUserDefaults but you can retrieve it from Firebase database if you stored it while uploading.
if let storagePath = NSUserDefaults.standardUserDefaults().objectForKey("storagePath.\(UID)") as? String {
print(storagePath)
FIRControllerClass.storageRef.child("ProfilePictures").child(storagePath).writeToFile(NSURL.init(string: filePath)!, completion: {(url, err) -> Void in
if err != nil{
self.delegate.firShowAlert("Error downloading", Message: "There was an error downloading your profile picture")
}else{
if let downloadedImage = UIImage(contentsOfFile: filePath1){
print("DOWNLOADED IMAGE :\(downloadedImage)")
self.profilePicture = downloadedImage
completion(image : self.profilePicture)
}
}
})
}else{
completion(image: UIImage(named: "defaultProfilePic")!)
//Default profile pic or Placeholder picture if there is no picture from the user...which you can also download from the FIRStorage..think
}
}
至于检查您的朋友何时更改其个人资料图片,当用户更改其个人资料图片时,您将在存储中替换用户图片,并将其链接存储在数据库中,并且为了了解用户何时更改其个人资料图片,请使用.observeEventType(.儿童已更改,..
这将通知您该位置的更改,然后通过dispatch_
异步更新您的UI
PS:-参考Firebase的官方示例,您正在本项目中寻找身份验证:https://github.com/firebase/quickstart-ios
问题内容: .htaccess我很难受。我想为我正在工作的网站创建友好的URL。 基本上我想将其转换为: 变成这个: 如果以后需要,我也想知道如何将文章标题添加到URL的末尾(如下所示)(我正在使用PHP): 注意:Stackoverflow方法对我也有好处,例如,此问题的网址为: 但是您可以在id后面放任何东西,它也可以工作。像这样: 我使用了一些自动Web工具来创建.htacces文件,但该文
这是一个众所周知的问题,当您在Windows上更新Java、JDK或JRE时,Eclipse很可能无法启动,因为它指向过时的JDK/JJRE文件夹。修复是相对简单的,它是在这里或这里的几个线程上讨论和解决的。 但我发现这些解决方案缺乏灵活性,令人不满意。此解决方案建议在转换为: 这意味着你必须在每次更新后,一次又一次地进行。如果您经常更新JDK,并且每个人都应该有最新的安全补丁,这会使它非常烦人。
我有一个有大约200张幻灯片的PowerPoint演示文稿。每张幻灯片都有一个图表,其中的数据通过到主xlsx文件的链接每月更新一次。 为了不在图表中显示空值(未来月份),我打开数据编辑器(图表右键单击>Edit data...)并选择直到当前月份的范围。 我在PowerPoint中为它写了一个宏:
目前只有电脑端能进行好友分组,移动端只能同步电脑端好友分组情况,并显示分组详细信息,暂不支持好友分组功能。 1)进入我的好友列表,新增分组 2)对分组列表进行重命名、删除操作。 3)对分组下的成员进行移动分组操作。
您好,我目前正在使用Recyclerview ListAdapter,我想知道什么是等价的通知DataSetChanged或如何在添加值/记录后更新整个列表。? 我目前使用过此方法,但如果不刷新,则不会更新。 我想回到回收器视图。适配器和通知数据设置更改()。这样我的问题就解决了,你觉得怎么样?提前谢谢。
我有多个微服务,我使用docker compose进行开发部署。当microservices代码库中有一些更改时,我会触发ci作业来重新部署它们。我有下面的脚本来做这件事。但每次我都必须从头开始构建所有图像,然后运行它们。完成所有这些操作后,我得到了图像。所以我使用最后一个脚本来删除它们。你有什么建议使这个过程更实用?是否有任何方法可以更新现有图像而不使用新的更改将其删除? 其他信息:我正在使用