将文件上传到 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 存储。继续显示“E/StorageException:StorageException 已发生。出现未知错误..'