【问题标题】:Upload file to Firebase Storage Error 404 - "Not Found. Could not get object"将文件上传到 Firebase 存储错误 404 -“未找到。无法获取对象”
【发布时间】: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


【解决方案1】:

我已经修复了问题。

首先,我从fileRef.putFile 记录了错误

“文件“...”无法打开,因为您没有 有权查看。”

然后我需要在功能中启用 iCloud 文档。之后错误仍然存​​在,这是由于.upload 而不是.import 导致以下行。

 let picker = UIDocumentPickerViewController(documentTypes: [String(kUTTypePDF)], in: .import)

【讨论】:

    猜你喜欢
    • 2019-11-06
    • 1970-01-01
    • 2017-11-07
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多