我正在做一个离子项目,在这个项目中,我想上传照片,并将它们添加到Firebase存储中的特定节点。现在我所做的是在存储中上传照片。
我想做的是不在存储中上传这些照片,而是在节点中引用它们,如下所示:
我已经手动完成了在imgur上传照片并复制链接,但我需要一个自动程序来让用户上传照片到特定的城市。
假设用户在一个城市,拍了一张照片并上传到Firebase上。通过将其上传到存储中,可以获得他所在的cityname,并通过调用它来添加一张新照片,例如“username_cityname_photo”。但是,由于一个用户可以在不同的时间html" target="_blank">上传同一城市的多张照片,我如何轻松地上传一张新照片而不覆盖已经在存储区的照片?
出于这个原因,我想知道是否有一种方法可以不在存储区上传照片,而是直接在数据库上传照片,例如生成一个引用URL,这样每一张新照片都可以简单地附加在相应的节点下。
所以你可以上传一个图像到Firebase数据库,但它必须是二进制或一些奇怪的东西,这通常是不被接受的做法。为了使这些URL在存储中唯一,您可以在CityName->autoIdKey下上传它们,这将是唯一的。这也意味着一个城市的所有图像都将在它的名字下存储,这可能会方便以后。
您可以使用以下代码获取当前用户所在城市
import Foundation
import MapKit
typealias JSONDictionary = [String:Any]
class LocationServices {
let shared = LocationServices()
let locManager = CLLocationManager()
var currentLocation: CLLocation!
let authStatus = CLLocationManager.authorizationStatus()
let inUse = CLAuthorizationStatus.authorizedWhenInUse
let always = CLAuthorizationStatus.authorizedAlways
func getAdress(completion: @escaping (_ address: JSONDictionary?, _ error: Error?) -> ()) {
self.locManager.requestWhenInUseAuthorization()
if self.authStatus == inUse || self.authStatus == always {
self.currentLocation = locManager.location
let geoCoder = CLGeocoder()
geoCoder.reverseGeocodeLocation(self.currentLocation) { placemarks, error in
if let e = error {
completion(nil, e)
} else {
let placeArray = placemarks as? [CLPlacemark]
var placeMark: CLPlacemark!
placeMark = placeArray?[0]
guard let address = placeMark.addressDictionary as? JSONDictionary else {
return
}
completion(address, nil)
}
}
}
}
}
函数获取城市名称:
func getCityName() -> String {
LocationServices.shared.getAdress { address, error in
if let a = address, let city = a["City"] as? String {
return city
}
else {
return "NO_CITY_NAME"
}
}
}
@IBAction func postPressed(_ sender: Any) {
// get the cityname
let city = getCityName()
let uid = Auth.auth().currentUser!.uid
let ref = Database.database().reference()
let storage = Storage.storage().reference(forURL: "gs://YourUrlHere")
let key = ref.child("pois").childByAutoId().key // unique key
let imageRef = storage.child("pois").child(city).child("\(key).jpg")
let data = UIImageJPEGRepresentation(photo, 0.6)
let uploadTask = imageRef.putData(data!, metadata: nil) { (metadata, error) in
if error != nil {
// do something
return
}
imageRef.downloadURL(completion: {(url, error) in
// upload of image worked now get the url to upload to your database
if let url = url, let author = Auth.auth().currentUser?.displayName {
let feed = ["city": ,
"pathToImage": url.absoluteString, // here is your storage url to upload to Firebase DB
: key] as [String: Any]
let postFeed = ["\(key)" : feed]
ref.child("pois").updateChildValues(postFeed, withCompletionBlock: { (error, success) in
if error != nil {
// do something
return
}
else {
// data successfully uploaded
}
})
}
})
}
uploadTask.resume()
uploadTask.observe(.success) { (snapshot) in
// do something when upload is finished
return
}
uploadTask.observe(.failure) { (snapshot) in
// do something on failure
return
}
}
我试图构建一个,它包括两个按钮,一个用于用相机拍照并上传到Firebase存储,另一个用于从Firebase存储下载图像并在上显示。 现在,我被上传功能卡住了。我可以把照片保存到应用程序目录中。我想上传保存的图片到Firebase存储。
问题内容: 在这里很难说出要问什么。这个问题是模棱两可,含糊不清,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 8年前关闭。 是否可以在SQL数据库(或任何其他数据库)中存储图片,声音,视频?如果是,应该是什么格式,请详细说明必须配置的特殊设置(如果有)。提前致谢。 问题答案: 在MySQL中,您可以使用列的BINARY或VARBIN
我在这个模块中的主要目标是将用户的个人资料图片上传到Firebase存储库中,并将照片URL存储到Firestore(云Firestore)中。 注: 我上载的图像只有JPG和PNG格式。 这是跨平台应用程序,使用离子和角 null update-profile.component.html
我有两个关于Firebase实时数据库的重要问题(对于带有java的android)。 遵守以下结构: 我有以下课程: 为了搜索用户的数据(姓名、年龄、地区和肤色),我做到了: 问题1:在进行搜索时,firebase是只下载用户数据(除了消息节点)还是也下载消息节点中的数据? 想象一下,消息节点中有数百万条消息,进行此搜索,是否也会下载数百万条消息?为什么消息节点在用户节点内? 我只想要数据名称、
我正在eclipse中使用模拟器。我在模拟器中提取了大约2200条文本消息/data/data/com.android.providers.telephony/databases/mmssms。从emulator中读取db,并在其中看到文本消息 SQLiteDatabase smsDB=SQLiteDatabase.openDatabase("/data/data/com.android.prov
我有一个表单,如果我使用存储文件,是整个文件内容存储在数据库还是只是文件路径? 假设我有几十万或几百万个文件。因为表的大小必须很大,所以将它们存储在数据库中是否有效? 如果我不想把它们存储在数据库中,简单的上传并保存在本地文件系统中,有没有办法得到所有文件名的列表?通过将它们存储在数据库中,我只需通过以下方式获得: 谢谢