将文件上传到 s3,然后将 URL 存储在 Firebase - Swift 2.2

Posted

技术标签:

【中文标题】将文件上传到 s3,然后将 URL 存储在 Firebase - Swift 2.2【英文标题】:Uploading files to s3 and then storing the URL in Firebase - Swift 2.2 【发布时间】:2016-04-25 13:49:33 【问题描述】:

我想将 png 文件上传到 s3,然后将 s3 文件 url 以 Firebase json 格式存储。 s3 部分工作正常,但 Firebase 函数以某种方式进入汇编代码并且无法运行。

我得到的信息是:

Firebase 是经过优化编译的 - 步进可能会表现得很奇怪;变量可能不可用。

func uploadToS3(writePath: NSURL) 
    let ext = "png"
    let uploadRequest = AWSS3TransferManagerUploadRequest()
    uploadRequest.body = writePath
    uploadRequest.key = NSProcessInfo.processInfo().globallyUniqueString + "." + ext
    uploadRequest.bucket = S3BucketName
    self.s3URL = NSURL(string: "http://s3.amazonaws.com/\(S3BucketName)/\(uploadRequest.key!)")!
    uploadRequest.contentType = "image/" + ext
    let transferManager = AWSS3TransferManager.defaultS3TransferManager()
    transferManager.upload(uploadRequest).continueWithBlock  (task) -> AnyObject! in
        if let error = task.error 
            print("Upload failed ❌ (\(error))")
        
        if let exception = task.exception 
            print("Upload failed ❌ (\(exception))")
        
        if task.result != nil 
            print("Uploaded to:\n\(self.s3URL)")
            updateFirebase(self.s3URL) **this doesn't run**
        
        else 
            print("Unexpected empty result.")
        
        return nil
    

func updateFirebase(url: NSURL)
   let ref = self.userRef.childByAppendingPath(self.uid).childByAppendingPath("photos")
   ref.updateChildValues([url.absoluteString: true])
    print("updated firebase")

感谢任何帮助!

【问题讨论】:

transferManager 块中的任何内容都被调用了吗?即在该块中添加一个打印语句,看看它是否到达那里。此外,该块是否存在某种预期的返回值(返回 nil?)。最后,this doesn't run 是什么意思?它永远不会到达那条线,或者它会在那条线崩溃? 它被调用,“Uploaded to :\n(self.s3URL)”被打印出来。方法 updateFirebase(url: NSURL) 没有运行,而是“Firebase 已通过优化编译 - 步进可能表现异常;变量可能不可用。”在控制台中打印出来,即 let ref = self.userRef.......... 和 ref.updateChildValues............ 【参考方案1】:

一种可能性是您的构建设置设置为发布而不是调试。该设置在项目设置中,然后在 Swift 编译器 - 代码生成中的组合和底部。 Debug 应该是 None 并且 Release 应该是 Fast。我认为这些是默认设置,但值得一试

第二个是构建配置错误。在窗口顶部选择您的项目名称并下拉到 Edit Schema 和 Build Configuration 应设置为 Debug。

大约一年前我遇到了这个问题,创建一个新项目并导入文件会更快 - 你的里程可能会有所不同。

【讨论】:

以上是关于将文件上传到 s3,然后将 URL 存储在 Firebase - Swift 2.2的主要内容,如果未能解决你的问题,请参考以下文章

使用aws cli将S3对象上传到存储桶后如何获取它?

将 CSV 文件从 JSON 数据上传到 S3 存储桶

将存储在内存中的文件上传到s3

使用 AlamoFire 和预签名 URL 将图像上传到 S3 存储桶时出现问题

将文件上传并压缩到s3

将多个图像存储到 Firebase 并获取 url