gpt4 book ai didi

swift - 下载 Firebase 存储文件设备问题

转载 作者:行者123 更新时间:2023-11-28 11:01:50 27 4
gpt4 key购买 nike

我正在尝试从 Firebase 存储中下载一个 word 文档。在模拟器上,一切都按预期工作。然而在我的设备上,我收到以下错误:

Optional(Error Domain=FIRStorageErrorDomain Code=-13000 "An unknown error occurred, please check the server response." UserInfo={object=26 October 2016.docx, bucket=app.appspot.com, NSLocalizedDescription=An unknown error occurred, please check the server response., ResponseErrorDomain=NSCocoaErrorDomain, NSFilePath=/tmp/bulletin, NSUnderlyingError=0x1702590b0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}, ResponseErrorCode=513})

我一直在看的其他帖子似乎没有给我一个有效的答案,我所知道的是文件权限存在问题,即使我使用的是推荐目录 (tmp)。

这是下载文件的代码

 let Ref_Bulletin = Bulletin.referenceForURL("gs:/app.appspot.com/Bulletin/\(Today.stringFromDate(NSDate())).docx")

// Create local filesystem URL
let localURL: NSURL! = NSURL(string: "file:///tmp/today.docx")


// Download to the local filesystem
let downloadTask = Ref_Bulletin.writeToFile(localURL) { (URL, error) -> Void in
if (error != nil) {
print(error.debugDescription)
// Uh-oh, an error occurred!
} else {
print("Working As Expected")
self.Web_View.loadRequest(NSURLRequest(URL: localURL))
}

那么是什么导致了这个问题,我该如何解决呢?

更新:

所以我尝试创建目录,但有人告诉我我没有权限,即使文档说我可以写入 tmp。

Unable to create directory Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “today.docx” in the folder “h”." UserInfo={NSFilePath=/tmp/h/today.docx, NSUnderlyingError=0x1702498a0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}

这是创建目录的代码:

 do {
try NSFileManager.defaultManager().createDirectoryAtPath(localURL.path!, withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
NSLog("Unable to create directory \(error.debugDescription)")
}

最佳答案

我认为这里的问题是 tmpDocuments 目录实际上并不存在于 /tmp/Documents(例如,看起来好像 /Documents 实际上是 /User/Documents,实际上是 /private/var/mobile/Documents ,参见:https://www.theiphonewiki.com/wiki/ )

您需要确保根据系统认为这些目录所在的位置而不是字符串来创建文件 URL:

NSURL *tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory()];
NSURL *fileURL = [[tmpDirURL URLByAppendingPathComponent:@"my_file"] URLByAppendingPathExtension:@"txt"];

或类似的 NSDocumentDirectory。至于为什么这在模拟器上有效:我认为这是因为模拟器上的沙盒与真实设备的工作方式不同,并且 /tmp 显然是您可以写入的有效位置(虽然可能不是你想要写两个的那个,当你试图在真实设备上做这件事时,iOS 会发出嘶嘶声证明这一点)。

关于swift - 下载 Firebase 存储文件设备问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40251223/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com