无法将文件保存到ios swift中的本地存储

时间:2018-08-16 07:03:22

标签: ios swift swift3 ios7

我正在尝试从服务器下载文件内容,在客户端上创建一个文件并将所有内容传输到该文件。我正在将文件保存到本地存储,但是无法保存会引发异常,因为您没有权限保存在文件夹中。尝试了很多事情,但未能做到。我对这个ios编程非常陌生。请帮帮我,谢谢。

下面是我的代码:

 let documentsUrl =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
 var fileURL : URL = URL(fileURLWithPath: documentsUrl!.path+filename)
  fileURL = URL(fileURLWithPath: documentsUrl!.path+filename+".doc")
  let data = NSData(contentsOf: tempLocalUrl)
                do {
                    try data?.write(to: fileURL, options: .atomic)
                } catch {
                    print(error,"helooooooooooooooooo")
                }

我使用了relativepath,absolutestring,但仍然没有运气。

这是错误:

  

Error Domain = NSCocoaErrorDomain代码= 513“您没有权限将文件“ DocumentsImport From IE.doc”保存在文件夹“ 0103E60B-478F-475B-A8F2-788534F5D206”中。 UserInfo = {NSFilePath = / var / mobile / Containers / Data / Application / 0103E60B-478F-475B-A8F2-788534F5D206 / DocumentsImport from IE.doc,NSUnderlyingError = 0x1076efe90 {Error Domain = NSPOSIXErrorDomain Code = 1“不允许操作”}}

3 个答案:

答案 0 :(得分:1)

从不构建路径

documentsUrl!.path+filename+".doc"

不要那样做。您可能会忘记实际使用的路径分隔符。

URL具有专用的API来构建路径

let documentsUrl =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileURL = documentsUrl.appendingPathComponent(filename).appendingPathExtension("doc")
do {
    let data = try Data(contentsOf: tempLocalUrl) // not NSData !!
    try data.write(to: fileURL, options: .atomic)
} catch {
    print(error,"helooooooooooooooooo")
}

答案 1 :(得分:0)

错误中的路径是:

/var/mobile/Containers/Data/Application/0103E60B-478F-475B-A8F2-788534F5D206/DocumentsImport From IE.doc

代替:

/var/mobile/Containers/Data/Application/0103E60B-478F-475B-A8F2-788534F5D206/Documents/Import From IE.doc

并使用appendingPathComponent连接路径元素。

答案 2 :(得分:0)

我这样保存图片

让fileManager = FileManager.default 做{

let documentDirectory = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil, create:false)
let fileURL = documentDirectory.appendingPathComponent(name)
let image = #imageLiteral(resourceName: "Notifications")if let imageData = UIImageJPEGRepresentation(image, 0.5) {
    try imageData.write(to: fileURL)
    return true  }} catch {   print(error)}