我一直试图通过以下方法使用从Firebase下载的图像,方法是创建一个数组并将其附加到该图像上。每当我尝试离线使用该图片
if let data = data, let imge1 = UIImage(data: data) {
我看不到它或显示它。
是否可以使用该功能之外的图像?
这是我获取图像的代码:
let storage = Storage.storage()
let imageReference = storage.reference(withPath: "img/betos.png")
imageReference.getData(maxSize: 1 * 1024 * 1024) { data, error in
if let error = error {
print("Could not retrieve profile image: \(error.localizedDescription)")
return
}
if let data = data, let imge1 = UIImage(data: data) {
//self.profileButton.setImage(profileImage, for: .normal)
print("success")
logoImages.append(imge1)
}
}
这是我尝试使用它的方式:
let cellView = UIImageView()
cellView.image = logoImages.first
cellView.frame = CGRect(x:50, y: 50, width: 50, height: 50)
view.addSubview(cellView)
答案 0 :(得分:1)
此处针对网络示例说明了图像的一般用法:
https://firebase.google.com/docs/storage/ios/download-files
这是如果您没有首先生成SignedUrl。
如果您只是想从Web上显示文件,建议您通过云功能和Google Cloud Admin API将下载网址设置为metaData。
云功能如下所示: const functions = require('firebase-functions');
const admin = require('firebase-admin');
const {Storage} = require('@google-cloud/storage');
const gcs = new Storage({keyFilename: 'serviceAccountKey.json'})
exports.profilePicMetaDataChanged = functions.storage.object().onFinalize( object => {
const fileBucket = object.bucket; // The Storage bucket that contains the file.
const filePath = object.name; // File path in the bucket.
const contentType = object.contentType; // File content type.
let filePathElements = filePath.split("/");
//Here you should make sure the only files that have the right path are edited
const fileName = filePathElements.pop();
const fileDir = filePathElements.join("/") + "/";
const bucket = gcs.bucket(fileBucket);
const file = bucket.file(filePath);
file.getSignedUrl({
action: 'read',
expires: '03-09-2491'
}).then( signedUrls => {
let picDownloadUrl = signedUrls [0];
file.setMetaData({
contentType: 'image/jpeg', // or 'image/png' if file is png
metadata: {
downLoadUrl: picDownloadUrl;
}
})
});
return true;
});
完成此操作后,您可以在客户端执行此操作以获取下载网址
// Create reference to the file whose metadata we want to retrieve
let forestRef = storageRef.child("images/forest.jpg")
// Get metadata properties
forestRef.getMetadata { metadata, error in
if let error = error {
// Uh-oh, an error occurred!
} else {
// Metadata now contains the metadata for 'images/forest.jpg'
}
}
快速代码是从这里获取的:https://firebase.google.com/docs/storage/ios/file-metadata