【问题标题】:Not able to upload Images on to Google Firebase Storage using iOS Swift API无法使用 iOS Swift API 将图像上传到 Google Firebase 存储
【发布时间】:2019-01-30 14:40:01
【问题描述】:

早些时候,我能够将图像上传到 Google Firebase Strage。但突然它不工作了。

下面是代码:

private func uploadEmergencyImages(images: [Int: URL], emergencyId: String){
    let imagesRef = Storage.storage().reference().child("incidents").child(emergencyId).child("images")

    if(!images.isEmpty){
        for (key, value) in images {
            print("Image to be Uploaded = \(value.absoluteString)")

            let imageData = try! Data(contentsOf: value)
            //                let image = UIImage(data: imageData)

            let metaData = StorageMetadata()
            metaData.contentType = "image/png"
            imagesRef.child("Image_\(key+1).png").putData(imageData, metadata: metaData) { (storageMetaData, storageError) in
                if(storageError != nil){
                    print("Error - While uploading Image:: \(storageError.debugDescription)")
                }else{
                    print("Upload completed...")
                }
            }
        }
    }
}

以下是错误消息(注意:这里我为这篇文章用“XXX”掩盖了我的 firebasePrjName。)

2018-08-23 20:25:54.758092+0300 XXX[44855:1058133] [AXRun-PID] 客户端 请求取消暂停 PID:44870 名称:2018-08-23 20:25:55.833590+0300 XXX[44855:1057851] [AXRun-PID] 客户端请求 PID:44870 解除暂停名称:2018-08-23 20:25:57.512286+0300 XXX[44855:1057987] [发现] 遇到错误 发现扩展时:Error Domain=PlugInKit Code=13 "query 取消” UserInfo={NSLocalizedDescription=查询取消} 新 事件密钥 = -LKboaL9nTohkCHuYp1U 要上传的图像 = file:///Users/macbookpro/Library/Developer/CoreSimulator/Devices/863EEA6A-F1F5-4A6C-B19B-D686D81486F4/data/Containers/Data/Application/F0D6F426-EE5E-4B45-8D1F-3B880C049DF3/tmp/39F05E90-3F8F -4A40-84CB-1931D1E9C7CA.jpeg 2018-08-23 20:26:07.359567+0300 XXX[44855:1058132] TI​​C TCP 连接失败 [4:0x60400036ffc0]: 3:-9802 Err(-9802) 2018-08-23 20:26:07.360138+0300 XXX[44855:1058132] NSURLSession/NSURLConnection HTTP 加载失败 (kCFStreamErrorDomainSSL,-9802)2018-08-23 20:26:07.360235+0300 XXX[44855:1058132] 任务 . HTTP 加载失败(错误代码:-1200 [3:-9802])2018-08-23 20:26:07.360437+0300 XXX[44855:1057735] 任务 . 以错误结束 - 代码: -1200 错误 - 上传图片时:: Optional(Error Domain=FIRStorageErrorDomain Code=-13000 "发生未知错误, 请检查服务器响应。” UserInfo={NSLocalizedRecoverySuggestion=你想连接到 还是服务器?,NSLocalizedDescription=发生未知错误, 请检查服务器响应。, _kCFStreamErrorDomainKey=3, NSErrorPeerCertificateChainKey=( "", "" ), NSErrorClientCertificateStateKey=0, NSErrorFailingURLKey=https://firebasestorage.googleapis.com/v0/b/XXX-ots.appspot.com/o/incidents%2F-LKboaL9nTohkCHuYp1U%2Fimages%2FImage_1.png?uploadType=resumable&name=incidents%2F-LKboaL9nTohkCHuYp1U%2Fimages%2FImage_1.png, NSErrorFailingURLStringKey=https://firebasestorage.googleapis.com/v0/b/XXX-ots.appspot.com/o/incidents%2F-LKboaL9nTohkCHuYp1U%2Fimages%2FImage_1.png?uploadType=resumable&name=incidents%2F-LKboaL9nTohkCHuYp1U%2Fimages%2FImage_1.png, NSUnderlyingError=0x600000647290 {错误域=kCFErrorDomainCFNetwork 代码=-1200“(空)” UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=, _kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, kCFStreamPropertySSLPeerCertificates=( "", "" )}}, _kCFStreamErrorCodeKey=-9802, 对象=事件/-LKboaL9nTohkCHuYp1U/images/Image_1.png, ResponseErrorDomain=NSURLErrorDomain,桶=XXX-ots.appspot.com, NSURLErrorFailingURLPeerTrustErrorKey=, ResponseErrorCode=-1200})

我也尝试如下修改我的info.plist 文件,但没有成功:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

高度赞赏任何线索。

【问题讨论】:

    标签: ios swift firebase image-uploading firebase-storage


    【解决方案1】:

    这对我有用(swift 4 代码)

    let storageRef = DBProvider.Instance.imageStorageRef.child(user!.uid) // Put Here your Storage Referance  
    let imageData = UIImageJPEGRepresentation(youimagehere, 1.0) // put your image Here
    
    storageRef.putData(imageData!, metadata: nil, completion: { (metadata, error) in
    
        if error == nil
        {
            let path = metadata?.downloadURL()?.absoluteString
            print(path)
        }
    })
    

    确保您已启用 Firebase 存储读取、写入您的 Firebase 项目的权限。

    【讨论】:

    • 您好,感谢您的回复。但仍然不适合我。我什至尝试过另一种方法。 ` imagesRef.child("Image_(key+1).png").putFile(from: value, metadata: nil)` 我什至创建了单独的 Firebase 项目。但没有希望。
    • @RavindraSingh 然后确保您已从您的 Firebase 项目启用 Firebase 存储上传权限。
    • @RavindraSingh 我检查了一下,最终您在 Firebase 存储中遇到了读写权限问题,因为您的错误日志 URL 收到了该错误。 检查这是您的错误日志 URL firebasestorage.googleapis.com/v0/b/XXX-ots.appspot.com/o/…
    • @RavindraSingh 检查我编辑的答案。
    • 我已将我的规则设置为 :: service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write; } } } 。还有其他地方我必须设置规则吗?如果您能指导我如何“启用 Firebase 存储上传权限”,将会有很大帮助。注意:仅供参考,我在将信息输入“Firebase 数据库”时没有遇到任何问题。我已将规则设置为公共读写。如果你愿意,我可以分享我的试用项目的“GoogleService-Info.plist”文件。以便您也可以重现此错误。
    猜你喜欢
    • 2020-07-10
    • 1970-01-01
    • 2020-03-05
    • 2020-11-26
    • 2021-09-18
    • 2016-09-30
    • 2021-07-28
    • 2018-12-01
    • 2018-01-13
    相关资源
    最近更新 更多