代码之家  ›  专栏  ›  技术社区  ›  Sammy Eang

如何正确引用/检索在AppData中创建的临时文件,以便将文件上载到服务器?

  •  1
  • Sammy Eang  · 技术社区  · 7 年前

    因此,我正在制作的应用程序创建一个名为“日志文件”的文件,我正试图通过Alamofire上传将该文件发送到服务器。控制台日志中打印的文件路径为

    /var/mobile/Containers/Data/Application/3BE13D78-3BF0-4880-A79A-27B488ED9EFE/Documents/logfile。txt文件

    以及可用于手动访问中创建的日志的文件路径。xcappdata是

    /应用数据/文档/日志文件。txt文件

    要访问它,我使用

    let fileURL = Bundle.main.url(forResource: "", withExtension: "txt")
    

    在“forResource”的双引号之间,我尝试了上一段中列出的两个文件路径以及文件名,但找到的文件的值均为零。无法识别文件是否存在,可能是因为我使用的文件路径错误,因为Alamofire在尝试查找发送文件时返回nil。有谁知道我应该使用的直接文件路径来获取我的文件,因为其他两个路径可能不起作用?非常感谢。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Surjeet Singh    5 年前

    使用以下代码从文本文件中获取字符串数据以上载到服务器:

    let fileName = "logfile"
    let documentDirURL = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
    
    let fileURL = documentDirURL.appendingPathComponent(fileName).appendingPathExtension("txt")
    print("FilePath: \(fileURL.path)")
    
    var readString = "" // Used to store the file contents
    do {
        // Read the file contents
        readString = try String(contentsOf: fileURL)
    } catch let error as NSError {
        print("Failed reading from URL: \(fileURL), Error: " + error.localizedDescription)
    }
    print("File Text: \(readString)") // Send 'readString' to server
    
        2
  •  0
  •   Michael Hulet    7 年前

    如果您在运行时动态创建该文件,它将不在您的应用程序包中,因此 Bundle 班级将无法找到它。您看到的目录也是动态生成的,不仅特定于平台,而且特定于设备,因此您不能直接使用文件路径。相反,您必须在运行时从 FileManager 类,如下所示:

    guard let documents = FileManager.default.urls(for: .documentsDirectory, in: .userDomainMask).first else{
        // This case will likely never happen, but forcing anything in Swift is bad
        return
    }
    
    let logURL = URL(string: "logfile.txt", relativeTo: documents)
    
    do{
        let fileContents = String(contentsOf: logURL)
        // Send your file to your sever here
    catch{
        // Handle any errors you might've encountered
    }
    

    请注意,我是根据您在答案中粘贴的路径进行猜测的,您将答案放在应用程序的文档目录中。这是一个很好的放置这类东西的地方,但是如果我错了,而您将它放在另一个地方,那么您必须修改此代码以指向正确的位置