我正试图从我的Firebase存储下载图像f5bd8360.jpeg
。
当我使用dataWithMaxSize:completion
下载此图像到内存时,我可以下载它。
当我尝试使用writeToFile:
实例方法将图像下载到本地文件时,我的问题出现了。
我得到以下错误:
Optional(Error Domain=FIRStorageErrorDomain Code=-13000 "An unknown
error occurred, please check the server response."
UserInfo={object=images/f5bd8360.jpeg,
bucket=fir-test-3d9a6.appspot.com, NSLocalizedDescription=An unknown
error occurred, please check the server response.,
ResponseErrorDomain=NSCocoaErrorDomain, NSFilePath=/Documents/images,
NSUnderlyingError=0x1700562c0 {Error Domain=NSPOSIXErrorDomain Code=1
"Operation not permitted"}, ResponseErrorCode=513}"
这是我的Swift代码片段:
@IBAction func buttonClicked(_ sender: UIButton) {
// Get a reference to the storage service, using the default Firebase App
let storage = FIRStorage.storage()
// Get reference to the image on Firebase Storage
let imageRef = storage.reference(forURL: "gs://fir-test-3d9a6.appspot.com/images/f5bd8360.jpeg")
// Create local filesystem URL
let localURL: URL! = URL(string: "file:///Documents/images/f5bd8360.jpeg")
// Download to the local filesystem
let downloadTask = imageRef.write(toFile: localURL) { (URL, error) -> Void in
if (error != nil) {
print("Uh-oh, an error occurred!")
print(error)
} else {
print("Local file URL is returned")
}
}
}
我发现了另一个问题,我得到了同样的错误,但它从来没有得到完整的回答。我认为这个建议是对的。我没有在文件中写入的权限。但是,我不知道如何获得权限。什么好主意吗?
问题是,当您写这一行时:
let downloadTask = imageRef.write(toFile: localURL) { (URL, error) -> Void in
etc.
您还没有权限写入该(localURL
)位置。要使获得的权限,在尝试向localURL
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let localURL = documentsURL.appendingPathComponent("filename")
通过这样做,你将把文件写入设备上的以下路径(如果你在真实设备上进行测试):文件:///var/移动/集装箱/数据/应用/XXXXXXXetc.etc./文件/文件名
如果您在模拟器上进行测试,路径显然会在计算机上的某个地方。