Ios 未从Firebase存储下载图像
我正在尝试将图像从新的Firebase存储下载到本地文件。为此,我使用Firebase提供的示例。这是我的代码:Ios 未从Firebase存储下载图像,ios,swift,firebase,firebase-storage,Ios,Swift,Firebase,Firebase Storage,我正在尝试将图像从新的Firebase存储下载到本地文件。为此,我使用Firebase提供的示例。这是我的代码: func getTumbnails(imageName: String) { // Create a reference to the file you want to download let tumbnailRef = storageRef.child("tumbs/\(imageName)") // Create local filesystem URL
func getTumbnails(imageName: String) {
// Create a reference to the file you want to download
let tumbnailRef = storageRef.child("tumbs/\(imageName)")
// Create local filesystem URL
let localURL: NSURL! = NSURL(string: "file:///local/tumbnails/\(imageName)")
// Download to the local filesystem
let downloadTask = tumbnailRef.writeToFile(localURL) { (URL, error) -> Void in
if (error != nil) {
print(error)
} else {
let data = NSData(contentsOfURL: URL!)
self.data = data!
print(data)
}
}
}
但是,当我调用函数gettumbails(“image”)
时,控制台会显示以下错误:
可选(错误域=FIRStorageErrorDomain代码=-13000“出现未知错误,请检查服务器响应。”UserInfo={object=tumbs/Sunset.png,bucket=************.appspot.com,NSLocalizedDescription=发生未知错误,请检查服务器响应,ResponseErrorDomain=nsCoCarErrorDomain,NSFilePath=/local/tumbnails,NSUnderlyingError=0x137f629c0{error Domain=NSPOSIXErrorDomain Code=1“不允许操作”},ResponseErrorCode=513})
我在这里发现了有关stackoverflow的问题,但这是一个不同的错误(响应代码518,而我有513),而且由于我直接使用了示例代码,所以应该可以正常工作
有人能帮帮我吗?似乎您可能没有正确声明您的
storageRef
(即您的存储桶名为bucket=yourback.appspot.com
),或者您可能将Firebase/Storage
添加到您的工作区
,但没有更新Google info.plist
。也许您可以显示更多的代码
更新:
你可以试试
let localURL: NSURL! = NSURL.fileURLWithPath(string: "file:///local/tumbnails/\(imageName)")
看起来您可能没有正确声明您的
storageRef
(即您的bucket名为bucket=yourback.appspot.com
),或者您可能向工作区添加了Firebase/Storage
,但没有更新Google info.plist
。也许您可以显示更多的代码
更新:
你可以试试
let localURL: NSURL! = NSURL.fileURLWithPath(string: "file:///local/tumbnails/\(imageName)")
可能是iOS 9的应用程序传输安全问题,请将此代码添加到您的info.plist
中,然后再次检查
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
可能是iOS 9的应用程序传输安全问题,请将此代码添加到您的info.plist
中,然后再次检查
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
这里的问题是,您收到一个NSPOSIXErrorDomain
错误,表明您没有写入文件的权限file:///local/tumbnails/\(imageName)
,可能是因为该目录(/local
)不存在,即使存在,您也没有写入该目录的权限
我想查看一下您可以写入的目录列表——您可能应该使用/Documents
或/tmp
。这里的问题是,您收到一个NSPOSIXErrorDomain
错误,表明您没有写入该文件的权限file:///local/tumbnails/\(图像名称)
,大概是因为该目录(/local
)不存在,即使它存在,您也没有写入该目录的权限
我想看看你可以写入的目录列表——你可能应该使用/Documents
或/tmp
。谢谢,但我已经正确设置了所有内容。出于安全原因,我将其更改为yourback.appspot.com
,因为我还没有任何规则。也许你可以尝试让localURL:NSURL!=NSURL.fileURLWithPath(字符串:file:///local/tumbnails/\(imageName)”)
这不是Firebase存储问题,错误(令人困惑)是一个NSPOSIXErrorDomain
,这意味着问题来自文件系统不允许开发人员写入该位置。没错。我四处查看,其中一个修复似乎是。fileURLWithPath
谢谢,但我已正确设置了所有内容。出于安全考虑,我将其更改为yourback.appspot.com
ns,因为我还没有任何规则。也许您可以尝试让localURL:NSURL!=NSURL.fileURLWithPath(字符串):file:///local/tumbnails/\(imageName)”)
这不是Firebase存储问题,错误(令人困惑)是一个NSPOSIXErrorDomain
,这意味着问题来自文件系统不允许开发人员写入该位置。没错。我环顾四周,其中一个解决方案似乎是。fileURLWithPath
不,ATS不是必需的,因为Firebase存储使用了适当的SSL密码。不,ATS不是必需的,因为Firebase存储使用适当的SSL密码。谢谢!但是,这在模拟器上有效,但在实际设备上不起作用。模拟器上的应用程序沙盒可能与设备上的运行方式不同——您在设备上遇到了什么问题?您也可能在设备上使用不同的权限运行,并且无法访问o写入/Documents
(您可能需要写入您的用户目录或只需/tmp
)当您尝试写入/tmp
时,错误是否相同?设备是否越狱?是的,是相同的错误,并且我的设备不是越狱!但是,这在模拟器上有效,但在实际设备上无效。可能模拟器上的应用程序沙盒与设备上运行的应用程序沙盒不同-您在de上遇到了什么问题副作用?也可能是您在设备上以不同的权限运行,无法写入/Documents
(您可能必须写入您的用户目录或仅/tmp
)当您尝试写入/tmp
时,错误是否相同?设备是否越狱?是的,错误相同,并且我的设备未越狱