Firebase storage обработчик завершения downloadUrl всегда возвращает ошибку - PullRequest
0 голосов
/ 28 мая 2018

Итак, я следую документации , но всегда получаю эту ошибку:

Произошла ошибка: у пользователя нет прав доступа к gs: // ***- *****. appspot.com/(null).

Изображения загружены успешно, хотя.Единственное, что, когда вызывается обработчик завершения, он возвращает ошибку, и я не могу выбрать путь к изображению.Любая помощь приветствуется.Вот код:

func uploadImage(_ image: UIImage, completion: @escaping (String?, Error?) -> Void) {
        let filename = "\(Date().timeIntervalSince1970)"
        let imageReference = storage.child(FirestoreStorage.dishImagesPath).child(filename)

        guard let imageData = UIImageJPEGRepresentation(image, 0.8) else {
            completion(nil, CommonError.imageConversionError)
            return
        }
        let metadata = StorageMetadata()
        metadata.contentType = "image/jpeg"

        imageReference.putData(imageData, metadata: metadata, completion: { [storage] (metadata, error) in
            storage.downloadURL(completion: { (url, error) in
                guard let url = url else {
                    completion(nil, error)
                    return
                }
                completion(url.absoluteString, nil)
            })
        })
    }

Кроме того, это мои правила безопасности @ Firebase Storage:

service firebase.storage {
   match /b/my-project.appspot.com/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Хорошо, я смог это исправить и получить путь к изображению в обработчике завершения.Что случилось?Именно в этих двух строках:

imageReference.putData(imageData, metadata: metadata, completion: { [storage] (metadata, error) in
    storage.downloadURL(completion: { (url, error) in

imageReference является ссылкой на само изображение и хранилище является ссылкой на глобальное хранилище.Это недоразумение пришло из документов.Так и должно быть:

imageReference.putData(imageData, metadata: metadata, completion: { (metadata, error) in
    imageReference.downloadURL(completion: { (url, error) in
0 голосов
/ 28 мая 2018

Произошла ошибка, так как вы указываете на службу хранения для получения URL-адреса для загрузки.

storage.downloadURL

Вместо этого следует использовать ссылку на хранилище, чтобы получить ее.

imageReference.downloadURL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...