【发布时间】:2020-06-26 21:08:27
【问题描述】:
我正在尝试使用 UIDocumentPickerViewController 选择 PDF 文件并上传到 Firebase 存储,但不幸的是,我在控制台中不断收到错误的成功。
有人知道我做错了什么吗?提前谢谢你。
已选择: file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/Desktop/Documents/document.pdf
Coordinator 离开 Optional(Error Domain=FIRStorageErrorDomain Code=-13010 "对象上传/文档不存在。"
UserInfo={object=uploads/documents, ResponseBody={ "error": { “代码”:404, "message": "未找到。无法获取对象", “状态”:“GET_OBJECT”}},
bucket=name-webapp.appspot.com, data={length = 115, bytes = 0x7b0a2020 22657272 6f72223a 207b0a20 ... 54220a20 207d0a7d },data_content_type=应用程序/json; charset=UTF-8, NSLocalizedDescription=对象上传/文件确实 不存在。,ResponseErrorDomain=com.google.HTTPStatus, ResponseErrorCode=404})
上传图片数据:假,无
文档选择器
class Coordinator: NSObject, UIDocumentPickerDelegate {
var parent: FilePicker
init( parent1: FilePicker) {
self.parent = parent1
}
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
print("Selected: \(urls.first!)")
let localFile = urls.first!
// User reference URL for home/roomIndex/tenancy
// Pass to FirestoreManager
let firestoreManager = FirestoreManager()
firestoreManager.uploadFile(localFile: localFile, serverFileName: "filename.pdf") { (isSuccess, url) in
print("uploadImageData: \(isSuccess), \(url ?? "none")")
}
}
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
print("Cancelled")
}
deinit {
print("Coordinator going away")
}
}
Firebase
func uploadFile(localFile: URL, serverFileName: String, completionHandler: @escaping (_ isSuccess: Bool, _ url: String?) -> Void) {
let storage = Storage.storage()
let storageRef = storage.reference()
// Create a reference to the file you want to upload
let directory = "uploads"
let fileRef = storageRef.child(directory).child("documents")
_ = fileRef.putFile(from: localFile, metadata: nil) { metadata, error in
fileRef.downloadURL { (url, error) in
guard let downloadURL = url else {
// Uh-oh, an error occurred!
print("\(error)")
completionHandler(false, nil)
return
}
// File Uploaded Successfully
completionHandler(true, downloadURL.absoluteString)
}
}
}
【问题讨论】:
-
您在确定下载 URL 时似乎遇到了错误。您可能需要登录
error以查看问题所在。 -
几小时前你不是发布了几乎相同的主题吗?很难弄清楚您的代码有什么问题,因为您没有显示参考树。在我看来,以下内容是错误的。让 fileRef = storageRef.child(目录 + serverFileName)
-
有很多原因可能导致 - 我同意@ElTomato,因为该行看起来很可疑。通过强制解包选项并完全忽略此
metadata, error,您错过了错误检查,就好像有错误一样 - 它只会默默地失败。您可能无权访问存储(未经过身份验证),这也可能导致问题。添加一些错误检查并逐行检查您的代码,在您执行过程中检查变量,直到您发现一些不是您所期望的内容。用更多信息更新问题,我们会看看 -
@FrankvanPuffelen 道歉,我已经记录了错误并包含在原始帖子中
-
@ElTomato 不,我没有。我已经更新了原来的帖子
标签: swift firebase firebase-storage uidocumentpickerviewcontroller