我正在尝试从 iOS 中的共享扩展将图像上传到 Firebase 存储,我已经进行了身份验证并正在与数据库通信,但是当我尝试上传文件时,它立即失败。
我已经确保我正在使用的代码可以在我的主应用程序中使用它。我还确保文件在正确上传之前已保存在文件管理器中。
这是在上传之前保存文件的代码:
if let data = downsizeImage(image: image).jpegData(compressionQuality: 0.2) {
let fileManager = FileManager.default
let url = fileManager.containerURL(forSecurityApplicationGroupIdentifier: "group.com.<DOMAIN>.imageShare")?.appendingPathComponent("ImageToSend.jpg")
do {
try data.write(to: url!)
}
catch {
print(error.localizedDescription)
}
}
这是上传任务的代码:
let storageRef: StorageReference = Storage.storage().reference().child(storageLocation).child(UUID().uuidString)
var completed = false
var mediaUploadTask: StorageUploadTask?
let mediaTimeoutTask = DispatchWorkItem{ () in
if !completed {
mediaUploadTask?.cancel()
}
}
DispatchQueue.main.asyncAfter(deadline: .now() + 30, execute: mediaTimeoutTask)
mediaUploadTask = storageRef.putFile(from: mediaUrl, metadata: nil) {(metadata, error) in
completed = true
...
}
应该发生的情况是图像已成功上传,并且功能将正常继续。实际发生的情况是上传几乎立即失败。这是返回的错误:
Printing description of error:
▿ Optional<Error>
- some : Error Domain=FIRStorageErrorDomain Code=-13000 "An unknown error occurred, please check the server response."
UserInfo={bucket=link-ages-55880.appspot.com,
_NSURLErrorFailingURLSessionTaskErrorKey=BackgroundUploadTask <AC5EADEA-6257-4C32-9454-17626156AA15>.<1>,
object=media/4qnjSBKysi79uCR3cTzf/04D22317-D2C0-4A5C-B032-4F37DB2C8F7A,
_NSURLErrorRelatedURLSessionTaskErrorKey=(
"BackgroundUploadTask <AC5EADEA-6257-4C32-9454-17626156AA15>.<1>"
),
NSLocalizedDescription=An unknown error occurred, please check the server response.,
ResponseErrorDomain=NSURLErrorDomain, ResponseErrorCode=-995}
如果有人知道问题可能是什么,我们将不胜感激您的想法。谢谢。
我已经发现问题所在了。由于 iOS 沙箱的工作方式,请调用:
storageRef.putFile(from: mediaUrl, metadata: nil, completion: {(metadata, error) in})
失败了。更多信息在这里:原始答案。
请致电:
storageRef.putData(Data, metadata: nil, completion: {(metadata, error) in})
按预期工作。