ios - 无法使用 iOS Swift API 将图片上传到 Google Firebase 存储

标签 ios swift firebase image-uploading firebase-storage

早些时候,我能够将图片上传到 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] Client requesting unsuspension of PID:44870 Name: 2018-08-23 20:25:55.833590+0300 XXX[44855:1057851] [AXRun-PID] Client requesting unsuspension of PID:44870 Name: 2018-08-23 20:25:57.512286+0300 XXX[44855:1057987] [discovery] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled} New Incident Key = -LKboaL9nTohkCHuYp1U Image to be Uploaded = 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] TIC TCP Conn Failed [4:0x60400036ffc0]: 3:-9802 Err(-9802) 2018-08-23 20:26:07.360138+0300 XXX[44855:1058132] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) 2018-08-23 20:26:07.360235+0300 XXX[44855:1058132] Task .<1> HTTP load failed (error code: -1200 [3:-9802]) 2018-08-23 20:26:07.360437+0300 XXX[44855:1057735] Task .<1> finished with error - code: -1200 Error - While uploading Image:: Optional(Error Domain=FIRStorageErrorDomain Code=-13000 "An unknown error occurred, please check the server response." UserInfo={NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, NSLocalizedDescription=An unknown error occurred, please check the server response., _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 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=, _kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, kCFStreamPropertySSLPeerCertificates=( "", "" )}}, _kCFStreamErrorCodeKey=-9802, object=incidents/-LKboaL9nTohkCHuYp1U/images/Image_1.png, ResponseErrorDomain=NSURLErrorDomain, bucket=XXX-ots.appspot.com, NSURLErrorFailingURLPeerTrustErrorKey=, ResponseErrorCode=-1200})

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

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

非常感谢任何线索。

最佳答案

这对我有用 (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 存储读、写权限。

enter image description here

关于ios - 无法使用 iOS Swift API 将图片上传到 Google Firebase 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51998979/

相关文章:

android - 使用 Firebase for Android 更新特定值

iphone - 是否可以确定 ViewController 是否呈现为模态?

ios - CTRunDelegateRef iPhone 的内存管理

ios - 通知服务扩展未通过 api.sandbox.push.apple.com 到达设备

ios - 连接到导航 Controller 时如何将 ViewController 弹出到根目录

ios - Swift 中的单元测试 - 通过 XCTAssertTrue 方法插入中断和/或返回

ios - 如何从 UITableViewCell 中的 Switch 捕获事件?

firebase - React Native + Firebase 存储 : base64 and blob not working

android - 如何在刷新 token 后恢复主题订阅?

ios - 在不崩溃的情况下被拒绝后提示用户允许定位服务