将文件上传到 Firebase 存储错误 404 -“未找到。无法获取对象”

Posted

技术标签:

【中文标题】将文件上传到 Firebase 存储错误 404 -“未找到。无法获取对象”【英文标题】:Upload file to Firebase Storage Error 404 - "Not Found. Could not get object" 【发布时间】: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 不,我没有。我已经更新了原来的帖子 【参考方案1】:

我已经修复了问题。

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

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

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

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

【讨论】:

以上是关于将文件上传到 Firebase 存储错误 404 -“未找到。无法获取对象”的主要内容,如果未能解决你的问题,请参考以下文章

尝试将生成的 pdf 文件上传到 Azure Blob 存储时出现 404 错误

将文件上传到 Firebase 存储时出现身份验证错误

Firebase存储文件夹删除[重复]

无法将文件上传到 Firebase 存储。继续显示“E/StorageException:StorageException 已发生。出现未知错误..'

如何修复 React/Redux/Firebase 错误上传文件到存储

使用 firebase 功能将图像上传到云存储错误