将文件上传到 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的主要内容,如果未能解决你的问题,请参考以下文章