如何在storage.reference(withPath:“ PATH”)。getData方法外使用图像

时间:2019-08-20 10:48:21

标签: swift firebase firebase-storage

我一直试图通过以下方法使用从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)

1 个答案:

答案 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